Browse code

avoid unicode name collisions when scanning OLE2 containers

git-svn: trunk@2597

Tomasz Kojm authored on 2007/01/08 05:41:01
Showing 3 changed files
... ...
@@ -1,3 +1,8 @@
1
+Sun Jan  7 21:38:01 CET 2007 (tk)
2
+---------------------------------
3
+  * libclamav: avoid unicode name collisions when scanning OLE2 containers,
4
+	       patch from Edwin
5
+
1 6
 Sun Jan  7 16:46:41 GMT 2007 (njh)
2 7
 ----------------------------------
3 8
   * clamav-milter:	s/DetectPhishing/PhishingSignatures/g
... ...
@@ -134,7 +134,7 @@ static char *get_property_name(char *name, int size)
134 134
 		return NULL;
135 135
 	}
136 136
 
137
-	newname = (char *) cli_malloc(size*2);
137
+	newname = (char *) cli_malloc(size*7);
138 138
 	if (!newname) {
139 139
 		return NULL;
140 140
 	}
... ...
@@ -148,6 +148,15 @@ static char *get_property_name(char *name, int size)
148 148
 				newname[j++] = '_';
149 149
 				newname[j++] = name[i] + '0';
150 150
 			}
151
+			else {
152
+				const uint16_t x = (((uint16_t)name[i]) << 8) | name[i+1];
153
+				newname[j++] = '_';
154
+				newname[j++] = 'a'+((x&0xF));
155
+				newname[j++] = 'a'+((x>>4)&0xF);
156
+				newname[j++] = 'a'+((x>>8)&0xF);
157
+				newname[j++] = 'a'+((x>>16)&0xF);
158
+				newname[j++] = 'a'+((x>>24)&0xF);
159
+			}
151 160
 			newname[j++] = '_';
152 161
 		}
153 162
 	}
... ...
@@ -110,7 +110,7 @@ static char *get_unicode_name(char *name, int size, int is_mac)
110 110
                 return NULL;
111 111
         }
112 112
 
113
-        newname = (char *) cli_malloc(size*4);
113
+        newname = (char *) cli_malloc(size*7);
114 114
         if (!newname) {
115 115
                 return NULL;
116 116
         }
... ...
@@ -123,6 +123,15 @@ static char *get_unicode_name(char *name, int size, int is_mac)
123 123
                                 newname[j++] = '_';
124 124
                                 newname[j++] = name[i] + '0';
125 125
                         }
126
+			else {
127
+				const uint16_t x = (((uint16_t)name[i]) << 8) | name[i+1];
128
+				newname[j++] = '_';
129
+				newname[j++] = 'a'+((x&0xF));
130
+				newname[j++] = 'a'+((x>>4)&0xF);
131
+				newname[j++] = 'a'+((x>>8)&0xF);
132
+				newname[j++] = 'a'+((x>>16)&0xF);
133
+				newname[j++] = 'a'+((x>>24)&0xF);
134
+			}
126 135
                         newname[j++] = '_';
127 136
                 }
128 137
         }