OMail32.dll bug explained

This is the guilty part of OMAIL32.DLL:

.text:1001D364 83 7D 0C 00    cmp     [ebp+arg_4], 0
.text:1001D368 74 3A          jz      short use_default_val
.text:1001D36A 83 65 0C 00    and     [ebp+arg_4], 0
.text:1001D36E 8D 4D 0C       lea     ecx, [ebp+arg_4]
.text:1001D371 6A 0A          push    0Ah        ;number base
.text:1001D373 51             push    ecx        ;pointer to result
.text:1001D374 50             push    eax        ;pointer to cfg value
.text:1001D375 E8 AA 9B 00 00 call    _strtol    ;convert string to int
.text:1001D37A 8B F8          mov     edi, eax
....
.text:1001D38F 8B 45 08       mov     eax, [ebp+result]
....
.text:1001D39D 89 38          mov     [eax], edi
....

use_default_val: It's part of a function which converts all preferences which are numbers (also on/off preferences). As you can plainly see, there is an argument to the function which tells it to always use the default value if it's zero. I suppose the programmers put this in for testing, BUT FORGOT TO REMOVE IT AGAIN, causing Opera to use DEFAULT VALUES every time you restarted it. The astonishingly simple solution is to delete the jump, so just replace the bytes 74 3A in the file OMAIL32.DLL (which should be 262.193 bytes long, to be sure you have exactly the same version) at Offset 1D368 with 90 90...

Back to FAQ