http://bugs.winehq.org/show_bug.cgi?id=3709
mike@codeweavers.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |ASSIGNED
------- Additional Comments From mike@codeweavers.com 2006-11-01 02:30 -------
This one is interesting. Installing requires the windows version set to winxp, but it fails after that with the error message:
err:msidb:load_string_table string table load failed! (0035e981 != 001ce981)
The following notes are mainly for me, but might be useful to somebody else trying to understand the format of the MSI string table.
There's a very long string in the string table (more than 0x1a0000 bytes), and I don't exactly understand the format of the entries that declare it:
str# len%2^16 ref real len
4820 0 1 4821 34523 1 100059 4822 0 1 4823 0 2 4824 0 1 4825 6197 1 1710133 4826 0 0 4827 24 1 24 4828 0 1 4829 34124 1 99660
So we need to calculate "real len" as above...
"str#" is the offset into the table, and I interpret the unsigned short integer pairs "(len%2^16) ref" as follows:
"n 1" -> a string of n bytes (where n < 2^16) "0 0" -> a hole in the string table "0 m", "n 1" -> a string of m*65536+n bytes (should give up to 4G) "0 k", "0 m", "n 1" -> shouldn't be necessary...
I'm still not sure how a "0 n" followed by "0 m" is meant to be interpreted. Looking at the actual size of the string, it seems like it will increase the length of the next string by 0xa00000*m + 0x10000*n ... though I probably need to write some tests to confirm this.
------- Additional Comments From mike@codeweavers.com 2006-11-01 03:45 -------
This one is interesting. Installing requires the windows version set to winxp, but it fails after that with the error message:
err:msidb:load_string_table string table load failed! (0035e981 != 001ce981)
The following notes are mainly for me, but might be useful to somebody else trying to understand the format of the MSI string table.
There's a very long string in the string table (more than 0x1a0000 bytes), and I don't exactly understand the format of the entries that declare it:
str# len%2^16 ref real len
4820 0 1 4821 34523 1 100059 4822 0 1 4823 0 2 4824 0 1 4825 6197 1 1710133 4826 0 0 4827 24 1 24 4828 0 1 4829 34124 1 99660
So we need to calculate "real len" as above...
"str#" is the offset into the table, and I interpret the unsigned short integer pairs "(len%2^16) ref" as follows:
"n 1" -> a string of n bytes (where n < 2^16) "0 0" -> a hole in the string table "0 m", "n 1" -> a string of m*65536+n bytes (should give up to 4G) "0 k", "0 m", "n 1" -> shouldn't be necessary...
I'm still not sure how a "0 n" followed by "0 m" is meant to be interpreted. Looking at the actual size of the string, it seems like it will increase the length of the next string by 0xa00000*m + 0x10000*n ... though I probably need to write some tests to confirm this.