From cf3f8e6bde96deb3fc4e253de9259bc4386a4a10 Mon Sep 17 00:00:00 2001 From: daijro Date: Mon, 25 Nov 2024 00:20:27 -0600 Subject: [PATCH] pythonlib: Fix WebGL injection causing crashing 0.4.4-beta --- pythonlib/camoufox/utils.py | 20 ++++++++------------ pythonlib/camoufox/warnings.yml | 5 ++++- pythonlib/camoufox/webgl/sample.py | 16 +++++++++------- pythonlib/camoufox/webgl/webgl_data.db | Bin 274432 -> 274432 bytes pythonlib/pyproject.toml | 2 +- 5 files changed, 22 insertions(+), 21 deletions(-) diff --git a/pythonlib/camoufox/utils.py b/pythonlib/camoufox/utils.py index 3c1d1c1..1cdbd77 100644 --- a/pythonlib/camoufox/utils.py +++ b/pythonlib/camoufox/utils.py @@ -456,10 +456,6 @@ def launch_options( # Convert executable path to a Path object executable_path = Path(abspath(executable_path)) - # Block WebGL by default until a fix is avaliable. - if block_webgl is None: - block_webgl = True - # Handle virtual display if virtual_display: env['DISPLAY'] = virtual_display @@ -472,6 +468,10 @@ def launch_options( if os: check_valid_os(os) + # webgl_config requires OS to be set + elif webgl_config: + raise ValueError('OS must be set when using webgl_config') + # Add the default addons add_default_addons(addons, exclude_addons) @@ -565,19 +565,15 @@ def launch_options( firefox_user_prefs['media.peerconnection.enabled'] = False # Allow allow_webgl parameter for backwards compatibility - if block_webgl and not launch_options.pop('allow_webgl', False): + if block_webgl or launch_options.pop('allow_webgl', True) is False: firefox_user_prefs['webgl.disabled'] = True + LeakWarning.warn('block_webgl') else: - # Warn the user about WebGL - if not i_know_what_im_doing: - print( - 'NOTICE: WebGL is known to cause crashing or behave unexpectedly.' - 'A fix will be avaliable soon.' - ) - # If the user has provided a specific WebGL vendor/renderer pair, use it if webgl_config: merge_into(config, sample_webgl(target_os, *webgl_config)) + else: + merge_into(config, sample_webgl(target_os)) # Use software rendering to be less unique merge_into( diff --git a/pythonlib/camoufox/warnings.yml b/pythonlib/camoufox/warnings.yml index 10a87db..a8f360b 100644 --- a/pythonlib/camoufox/warnings.yml +++ b/pythonlib/camoufox/warnings.yml @@ -35,4 +35,7 @@ ff_version: >- no_region: >- Because you did not pass in a locale region, Camoufox will generate one for you. - This can cause suspicion if your IP does not match your locale region. \ No newline at end of file + This can cause suspicion if your IP does not match your locale region. + +block_webgl: >- + Disabling WebGL is not recommended. Many WAFs will check if WebGL is enabled. \ No newline at end of file diff --git a/pythonlib/camoufox/webgl/sample.py b/pythonlib/camoufox/webgl/sample.py index 8318a20..ddb6d18 100644 --- a/pythonlib/camoufox/webgl/sample.py +++ b/pythonlib/camoufox/webgl/sample.py @@ -44,21 +44,23 @@ def sample_webgl( (vendor, renderer), ) result = cursor.fetchone() - conn.close() if not result: raise ValueError(f'No WebGL data found for vendor "{vendor}" and renderer "{renderer}"') if result[3] <= 0: # Check OS-specific probability + # Get a list of possible (vendor, renderer) pairs for this OS + cursor.execute( + f'SELECT DISTINCT vendor, renderer FROM webgl_fingerprints WHERE {os} > 0' + ) + possible_pairs = cursor.fetchall() raise ValueError( - f'Vendor "{vendor}" and renderer "{renderer}" combination not valid for {os.title()}.' + f'Vendor "{vendor}" and renderer "{renderer}" combination not valid for {os.title()}.\n' + f'Possible pairs: {", ".join(str(pair) for pair in possible_pairs)}' ) - return { - 'vendor': result[0], - 'renderer': result[1], - **orjson.loads(result[2]), - } + conn.close() + return orjson.loads(result[2]) # Get all vendor/renderer pairs and their probabilities for this OS cursor.execute(f'SELECT vendor, renderer, data, {os} FROM webgl_fingerprints WHERE {os} > 0') diff --git a/pythonlib/camoufox/webgl/webgl_data.db b/pythonlib/camoufox/webgl/webgl_data.db index e0b06d635bc50b4e7998d03d9c75f133e45e7428..c28820e6134ca86df1ee03da4780184780f96048 100644 GIT binary patch delta 5802 zcmb_gYgAO%6~5=3dzlLZ!^p!?Gs;7J0m2~9qQ;?S#U~B;N;GW&AF(Pbw`vuP57gAO zl7QaClQb+#qFq_Vh}=x&7-NJqU8^z67~_u^UrXAU)z&sLVo-xwru*Ds9t^KB$q!gd zx%ce-ef!(r-sf&_HE(Yl@h6bJUfNj)}k}a*@%_|(d~(7 z4!oH_Yc3EAZM};YQuF6z3vKuuC#xxwa%k)~c!GYSLz(eXkVMJ_Qm!d$iShWev2xmG zAj3J=@!_1;dm|y#hlF3KX!+{_fv+zuREwIEc-jV@HcfMqi>#&qjVEloO12;`-L(7; zIj{5WAL_UVOQU+^-gr*4iH5)G#!|TAFMy?5Ak~`k9AJ4SMo!(pv82*sOvb32c8^dy z;^XNROv2$GajIRlstr{JREqe--8 zEh=SYX0$9|s3qkGy4S7`ysI(2`Yw*7Esu}~91;84N+O787l>U`vOwIKBZ4z4ja=NR zj+%YP0;%U>`mG6Pt8L|D`bB#Ou~-w1L~7Z#X&kRn$6L~f{{FC4^#n8rggF~Iw$|^K zBr;hblQktBQ05GW77pVmGogjE)De#1j@Gvq_lDN5g}1`9u@BS2PeXmDaJ;;61xMcM zQ=a-T%;;$C#romoaC;!{|wPhrmoTG$2>SYaE8 zx3J+qq_D1lffx41^OCqz5O(fW%0mxSJOX7M4rM(#&av0|d)e!OZ-S#@$G`565GC@K zK;F`nH%RF58N<4qysZdi@c8}^6wGE3G^M)^I@F7IUWUKfJn~-UJ-EA7TL-0QXJll@ z=dRfRBt&o`)RN}cXpIvs=PIx8Ihhyyi>{-G_7rk14O@uP^gyaI;{vlRLT53%Wku0M zEE2>bO_?tm+2EnFWwIGytnDGtgMoZja+g26H58 ziTy^OT=Ek~1w`geNy0}2d_+?Y;?NV*Ex{8jvq3qxN7AEfkcCApMxS=i*fr6+J3Lxm zLTxM11`3n>c{+I|+Uy=PJ*GK5xd#1{gBZd=&=M!w&rzgew(8gDS=^fu^o$j|5n{Q= z^Ee)G9<6x_rMshcA8x*Wz{9U+_pQiC#0o*I(3CRK*tB`D95)e`hp*z;?{=YY{Fa8p zn6{-Ni6=cwPx}3nD4JfYMOM%5a3YAkM^Qa;OQn-7Jb}t|fwb!{)Az36Xa?_$A>u?q zoTw>jAluw%IWFG-aksFUhmh5$Q5h^NU2*xVRvz4{2iF*s#a4q}Fwn+&l+?Y*u2qG8 zw}}MN2d|(N-SRmi`G$^qn9w7BQ0PktLVqccFE!;dtQY1;IV~TWwQU^x`U{lfLe2Yh zCT7JcqzKWYcTpIHCLP9M$Lg_9vYFcKu*u2%1xN6RcYl)Z`Znm|;pPu$1VYtsT)TwQa1E8-C1 zbqIsb;iKPc#`B1s{Rmv2?CUVKSL4B5+Kv{)XiYJK#)=2YX@#=Ea5Ix7B;Zs(ja|hd zwq(dILC-L+8o#SH+9Oz74LTjfYO^u(5ZlRsP9}*yCz}H~d2}ErFXAV+3Zzw2J_ChB zhs%+3xk6^Kwk0^Jgxf;8RYpNIQubLGZW22Fe3YP9O2h};P9v0aC*o( z&aaKNX%>iCQ-VOA%R)e&G2G4&19^TBh$zeG&n#r> zz}L@9n3}`Mi=5C2uH>Ak>0za*2V3Ns)_q*a77}{XL>7a45g_rHK#pn3VQ>O_F!vbQ z;FQ?kMv?-rI9;=%7KN-`1F2>3^whnnt5^Y;Ea8K}CiN7gcO>k>v^kZ4TVCNsYZpkn zru-Y?5m}DZXVZ9=HIn8nvT`lI@jlkfn9C)BC<^qZwutMru+wBVuNg% z&kZ(4-4nv!fjq?O(Lh|Q z$0S}p`aM?roweUI32Od*tmG$e4jD4inY=anch!q-z7if`~Qc z9x<|YM7HD`V8E6$xSY=LwpbOR&Gks{51z4|XRMa|@inzLe|Yy98>&BP^`A`r+)jTh p(Lx(OJCIxZV|Ra<9q=QI4|M(xd_Y6+0nGHpiQ?~VWf delta 11656 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"] license = "MIT"