UPD 24/09/2015: В последнем стабильном фф 41.0-1 опять поменяли escapeChars[], кстати, теперь по дефолту одинарная кавычка не енкодится. Меня откровенно задолбало то что они там меняют, поэтому
вот. Проверял - работает и в старых, и в новых версиях libxul, и в firefox и в iceweasel. И по идее, работать будет всегда. Аттачи удаляю, за ненадобностью.
В Firefox >= 40.0.? патчи работать не будут. Мой (8 пост) вообще, а патч SynQ (1 пост) не пофиксит одинарную кавычку, но двойную и обратную кавычку может. Связано это с очередным изменением в EscapeChars[] (mozilla-release/xpcom/io/nsEscape.cpp)
Код:
% tar -xJf ./firefox-40.0.3-1-x86_64.pkg.tar.xz usr/lib/firefox/libxul.so --strip-components=3
% ls
firefox-40.0.3-1-x86_64.pkg.tar.xz libxul.so make_ff_sexy.c xul.py
% ./xul.py ./libxul.so single_quote
Found magic sequence at offset 51510624
Error at sequence patching
% python2.7 -c 'print hex(51510624-0x10)'
0x311fd50
% xxd -seek 0x311fd50 ./libxul.so|head -1
0311fd50: ff03 0000 0000 0000 ff03 0000 7000 0000 ............p...
Патч для патча (

)SynQ:
Код:
--- ./xul.py.orig 2015-09-15 17:27:21.498302251 +0000
+++ xul.py 2015-09-15 17:27:21.498302251 +0000
@@ -17,5 +17,5 @@
if byte == enc:
- f.write(no_enc)
+ f.write(no_enc[0])
print 'This quote have been sent encoded (original behavior), now changed to have no encoding'
- elif byte == no_enc:
+ elif byte in no_enc:
print 'This quote have been sent unencoded (patched behavior), reverted it back to original behavior'
@@ -28,3 +28,3 @@
enc = '\x00\x00\x00\x00'
-no_enc = '\xFF\x03\x00\x00'
+no_enc = ['\xFF\x03\x00\x00', '\x70\x00\x00\x00']
single_quote = -1 * 4
Патч для моего патча:
Код:
--- ./make_ff_sexy.c.orig 2015-09-15 17:31:21.791624535 +0000
+++ make_ff_sexy.c 2015-09-15 17:31:33.671623988 +0000
@@ -5,2 +5,4 @@
* 10.0 Windows XP 32 bit $compiled by Tiny C Compiler
+ *
+ * UPD 02/09/15: Firefox 40.0.3-1 changed libxul sequence
*
@@ -20,3 +22,4 @@
-unsigned char sequence[] = "\xff\x03\x00\x00\x00\x00\x00\x00\xff\x03\x00\x00\x00\x00\x00\x00";
+unsigned char sequence[] = "\xff\x03\x00\x00\x00\x00\x00\x00\xff\x03\x00\x00\x70\x00\x00\x00";
+//unsigned char sequence[] = "\xff\x03\x00\x00\x00\x00\x00\x00\xff\x03\x00\x00\x00\x00\x00\x00"; //old one (firefox <= 40)
//unsigned char psequence[] = "\xff\x03\x00\x00\x00\x00\x00\x00\xff\x03\x00\x00\xff\x03\x00\x00";
P.S. я знаю что все леньтяи, так что всё готовое в аттачах.