2008-03-28 Dick Porter <dick@ximian.com>
authorDick Porter <dick@acm.org>
Fri, 28 Mar 2008 14:57:46 +0000 (14:57 -0000)
committerDick Porter <dick@acm.org>
Fri, 28 Mar 2008 14:57:46 +0000 (14:57 -0000)
* process.c (process_get_fileversion): Use the first language ID
we see, rather than insisting on an invariant language.  Fixes bug
374600.

svn path=/trunk/mono/; revision=99210

mono/metadata/ChangeLog
mono/metadata/process.c

index e3d1535eb627fbef89ee1d4e28bb1a1e28e0de48..d17483252f1e09253b71ef9d9a47e2fd41017c36 100644 (file)
@@ -1,3 +1,9 @@
+2008-03-28  Dick Porter  <dick@ximian.com>
+
+       * process.c (process_get_fileversion): Use the first language ID
+       we see, rather than insisting on an invariant language.  Fixes bug
+       374600.
+
 2008-03-28  Zoltan Varga  <vargaz@gmail.com>
 
        * reflection.c (calc_section_size): Use add_stream_zero to align the size of
index b8715e0bb8120fe2a395e654efbd32e45a62e326..154122d847721561a10694cc5c5d234e7128ec93 100644 (file)
@@ -249,7 +249,6 @@ static void process_get_fileversion (MonoObject *filever, gunichar2 *filename)
        gunichar2 *query;
        UINT ffi_size, trans_size;
        BOOL ok;
-       int i;
 
        datalen = GetFileVersionInfoSize (filename, &verinfohandle);
        if (datalen) {
@@ -296,40 +295,23 @@ static void process_get_fileversion (MonoObject *filever, gunichar2 *filename)
                        if (VerQueryValue (data, query,
                                           (gpointer *)&trans_data,
                                           &trans_size)) {
-                               /* Look for neutral or en_US language data
-                                * (or should we use the first language ID we
-                                * see?)
+                               /* use the first language ID we see
                                 */
-                               for (i = 0; i < trans_size; i += 4) {
+                               if (trans_size >= 4) {
+                                       gunichar2 lang_buf[128];
+                                       guint32 lang, lang_count;
 #ifdef DEBUG
-                                       g_message("%s: %s has 0x%0x 0x%0x 0x%0x 0x%0x", __func__, g_utf16_to_utf8 (filename, -1, NULL, NULL, NULL), trans_data[i], trans_data[i+1], trans_data[i+2], trans_data[i+3]);
+                                       g_message("%s: %s has 0x%0x 0x%0x 0x%0x 0x%0x", __func__, g_utf16_to_utf8 (filename, -1, NULL, NULL, NULL), trans_data[0], trans_data[1], trans_data[2], trans_data[3]);
 #endif
-
-                                       if ((trans_data[i] == 0x09 &&
-                                            trans_data[i+1] == 0x04 &&
-                                            trans_data[i+2] == 0xb0 &&
-                                            trans_data[i+3] == 0x04) ||
-                                           (trans_data[i] == 0x00 &&
-                                            trans_data[i+1] == 0x00 &&
-                                            trans_data[i+2] == 0xb0 &&
-                                            trans_data[i+3] == 0x04) ||
-                                           (trans_data[i] == 0x7f &&
-                                            trans_data[i+1] == 0x00 &&
-                                            trans_data[i+2] == 0xb0 &&
-                                            trans_data[i+3] == 0x04)) {
-                                               gunichar2 lang_buf[128];
-                                               guint32 lang, lang_count;
-
-                                               lang = (trans_data[i]) |
-                                                      (trans_data[i+1] << 8) |
-                                                      (trans_data[i+2] << 16) |
-                                                      (trans_data[i+3] << 24);
-                                               lang_count = VerLanguageName (lang, lang_buf, 128);
-                                               if (lang_count) {
-                                                       process_set_field_string (filever, "language", lang_buf, lang_count);
-                                               }
-                                               process_module_stringtable (filever, data, trans_data[i], trans_data[i+1]);
+                                       lang = (trans_data[0]) |
+                                               (trans_data[1] << 8) |
+                                               (trans_data[2] << 16) |
+                                               (trans_data[3] << 24);
+                                       lang_count = VerLanguageName (lang, lang_buf, 128);
+                                       if (lang_count) {
+                                               process_set_field_string (filever, "language", lang_buf, lang_count);
                                        }
+                                       process_module_stringtable (filever, data, trans_data[0], trans_data[1]);
                                }
                        } else {
                                /* No strings, so set every field to