Time |
Nick |
Message |
02:39 |
|
Seirdy joined #minetest-dev |
04:40 |
MTDiscord |
<Lone_Wolf> Bump https://github.com/minetest/minetest/pull/10449 |
05:57 |
|
NetherEran joined #minetest-dev |
06:24 |
|
NetherEran joined #minetest-dev |
07:28 |
|
Icedream joined #minetest-dev |
08:00 |
|
ShadowNinja joined #minetest-dev |
09:26 |
|
Wuzzy joined #minetest-dev |
09:36 |
|
lisac joined #minetest-dev |
09:43 |
|
calcul0n joined #minetest-dev |
10:40 |
|
troller joined #minetest-dev |
10:44 |
|
Fixer joined #minetest-dev |
10:54 |
|
pmp-p joined #minetest-dev |
11:46 |
|
calcul0n joined #minetest-dev |
13:02 |
|
NetherEran joined #minetest-dev |
13:24 |
MTDiscord |
<appguru> base64 is still wrong Krock / SmallJoker |
13:24 |
MTDiscord |
<appguru> fixing it |
13:37 |
MTDiscord |
<appguru> https://github.com/minetest/minetest/pull/10515 |
13:56 |
Krock |
though currently it works |
13:56 |
Krock |
perhaps just inaccurate |
14:02 |
MTDiscord |
<appguru> well, it has false positives |
14:02 |
MTDiscord |
<appguru> "A=A" is invalid base64, but would be accepted by the current implementation |
14:03 |
MTDiscord |
<appguru> on a sidenote, my fix should increase performance as there is no need to check every character against = |
14:07 |
Krock |
there would only be a single '=' comparison in the whole process because if previous logical OR conditions evaluate to "true", the other checks are skipped |
14:11 |
MTDiscord |
<appguru> true, but I save you the "or" |
14:12 |
rubenwardy |
The performance increase will be negligible |
14:13 |
rubenwardy |
A fix to correct behaviour would be the benefit |
14:14 |
MTDiscord |
<appguru> yes |
14:15 |
sfan5 |
please don't put that unrelated change in there |
14:18 |
MTDiscord |
<appguru> ok |
14:18 |
pgimeno |
base64 has been gotten wrong three times by the engineers at Linden Lab; pay close attention to the implementation and test it thoroughly and with invalid cases, like a string starting with a non-base64, of with a =, or with a character and a =, or with a character and an invalid symbol, etc. |
14:20 |
MTDiscord |
<appguru> I'm pretty certain that my fix works |
14:20 |
pgimeno |
for XORing in particular: first we had llXorBase64Strings, then llXorBase64StringsCorrect, then llXorBase64, and that one also had a bug that got caught early enough (but now they have to live with the other two because of compatibility) |
14:28 |
pgimeno |
I may be missing something, but I don't see a check for i % 4 |
14:28 |
pgimeno |
this base64 string is invalid, but it seems to be accepted: A= |
14:29 |
pgimeno |
this one is wrong too: ABCDE== |
14:29 |
pgimeno |
basically, if number of base64 chars % 4 = 1, the string is wrong |
14:30 |
sfan5 |
the code should calculate and check the amount of required padding |
14:33 |
MTDiscord |
<appguru> Well, we allow omitting padding |
14:33 |
pgimeno |
it could be more permissive with what it accepts, and accept strings without padding signs, but then care must be taken to avoid the last character if the total length % 4 = 1, so that e.g. a base64 string with 1 base64 char, optionally followed by padding, is taken as an empty string |
14:33 |
MTDiscord |
<appguru> We could check that IF padding is used, it has to be proper |
14:34 |
sfan5 |
the simplified check is fine then |
14:34 |
pgimeno |
in that case, every string is valid base64 |
14:34 |
pgimeno |
no need to check it |
14:34 |
rubenwardy |
This is the sort of code that can be unit tested very easily |
14:34 |
pgimeno |
yes, but first a specification is needed |
14:35 |
MTDiscord |
<appguru> True, and it should be documented in lua_api.txt |
14:35 |
MTDiscord |
<appguru> We have to keep allowing the omission of padding |
14:35 |
MTDiscord |
<appguru> How we deal with padding remains the question |
14:37 |
pgimeno |
for rigorous base64, where two base64 strings are equal iff the binary strings they represent are equal, additional checks need to be done on the last character in case i % 4 = 2 or 3 |
14:37 |
pgimeno |
I'd vote for "any string is a base64 string" |
14:38 |
pgimeno |
i.e. don't check padding, just consume base64 chars and omit the last if the total number of them % 4 = 1 |
14:39 |
pgimeno |
(stopping only at the first non-base64, or at end of string) |
14:39 |
sfan5 |
I don't know why you are making this so complicated, base64 decoding currently allows = in the middle of a string despite being invalid |
14:39 |
pgimeno |
and doesn't that stop the decoding? |
14:39 |
sfan5 |
and this PR changes it to only accept = at the end, which is closer to what it should do |
14:39 |
sfan5 |
I have no idea but that doesn't matter because it isn't supposed to decode invalid base64 |
14:40 |
MTDiscord |
<appguru> It decodes invalid base64 anyways tho |
14:40 |
sfan5 |
¯\_(ツ)_/¯ |
14:40 |
MTDiscord |
<appguru> From a glance it appears it stops if it encounters padding? |
14:41 |
MTDiscord |
<appguru> while (in_len-- && ( encodedstring[in] != '=') && is_base64(encodedstring[in])) |
14:41 |
pgimeno |
I'm not making it complicated at all, just bool base64_is_valid(std::string const& s) { return true; } |
14:41 |
pgimeno |
and for the decoder, the idea is to stop at the first break in a loop similar to this: https://github.com/minetest/minetest/pull/10515/commits/8409aef3f2bb5af295bb131a9977c5924ebc4dc3 |
14:41 |
pgimeno |
it's actually the simplest |
14:41 |
MTDiscord |
<appguru> The decoder already does it |
14:41 |
pgimeno |
just additionally do: if (i % 4 == 1) --i; |
14:42 |
sfan5 |
then replace "complicated" with "nonsense" |
14:42 |
MTDiscord |
<appguru> Yeah, such an implementation will lead to strange bugs |
14:42 |
sfan5 |
this PR improves base64 validation and your suggestion is "it should attempt to decode whatever garbage the user gives in, php style" |
14:42 |
MTDiscord |
<appguru> Also, people might use decode_base64 to validate it |
14:42 |
MTDiscord |
<appguru> "returns string or nil for invalid base64" - lua_api.txt |
14:43 |
pgimeno |
sfan5: well, if you want a mid term (not rigorous base64 but not relaxed), then you need to define what you want |
14:43 |
MTDiscord |
<appguru> base64_is_valid is currently not exposed |
14:43 |
MTDiscord |
<appguru> I'd say we go with optional padding, but if padding is used, check whether it's right |
14:43 |
MTDiscord |
<appguru> Note: My PR doesn't check the amount of padding characters, it just ensures it's between 0 and 2 at the end |
14:44 |
MTDiscord |
<appguru> Let me add this... |
14:44 |
sfan5 |
pgimeno: true and I think "base64 with or without padding" is a good enough specification |
14:46 |
pgimeno |
here's my suggestion for a mid term: construct a base64_is_valid that checks for rigorous base64 including pad bits as well as padding chars, and expose it to Lua; and a base64 decoder that accepts anything |
14:46 |
Krock |
or keep base64_is_valid as fast sanity check prior passing it to the real decoder |
14:47 |
MTDiscord |
<appguru> In that case you could save the is_base64 check in the decoder loop BTW |
14:48 |
pgimeno |
yeah, that's my point, it's not necessary and since everything is a base64 string, the decoder is not penalized |
14:48 |
pgimeno |
it just needs to stop at the first base64 character |
14:48 |
pgimeno |
non* base64 |
14:49 |
pgimeno |
user code that cares about the well-formedness of the string, can check with the exposed lua check; user code that doesn't, can just throw it into the decoder |
14:51 |
MTDiscord |
<appguru> hmm, padding should be base64 size % 4 ? |
14:51 |
pgimeno |
padding should make the total string length % 4 = 0 |
14:52 |
pgimeno |
so, 3-size%4 |
14:53 |
MTDiscord |
<appguru> yes |
14:53 |
MTDiscord |
<appguru> thanks |
14:54 |
pgimeno |
sorry, 3-(size+3)%4 |
14:58 |
|
appguru joined #minetest-dev |
14:58 |
pgimeno |
additionally, for it to be a canonical base64 string, when i % 4 = 2, the last character can only be one of [AQgw], and when i % 4 = 3, one of [AEIMQUYcgkosw048] |
14:58 |
pgimeno |
see https://www.ietf.org/rfc/rfc4648.txt section 3.5 |
15:00 |
appguru |
That document uses another alphabet |
15:01 |
pgimeno |
what? is Minetest not using A-Za-z0-9+/ ? |
15:01 |
appguru |
Sorry my fault |
15:02 |
appguru |
The alphabet is right |
15:02 |
appguru |
Was looking at the safe alphabet... |
15:12 |
appguru |
alright, done |
15:13 |
appguru |
now I'm not so sure anymore, it will need testing... |
15:13 |
rubenwardy |
by unit tests |
15:14 |
rubenwardy |
https://github.com/minetest/minetest/blob/master/src/unittest/test_utilities.cpp |
15:21 |
appguru |
Exposed it to the Lua API now |
15:29 |
pgimeno |
http://www.formauri.es/personal/pgimeno/pastes/valid64.lua |
15:32 |
pgimeno |
reload for more test cases |
15:33 |
pgimeno |
consider that file public domain |
15:34 |
MTDiscord |
<appguru> hmm nice |
15:34 |
pgimeno |
anyway, appguru, I'm not a code developer, I can only give advice, so better do as sfan5 says |
15:34 |
pgimeno |
code -> core |
16:21 |
|
lisac joined #minetest-dev |
17:35 |
|
homthack joined #minetest-dev |
17:40 |
|
calcul0n_ joined #minetest-dev |
17:58 |
|
Seirdy joined #minetest-dev |
18:18 |
Krock |
#10510 can this be kept close or shall I re-open it? |
18:18 |
pgimeno |
https://github.com/minetest/minetest/issues/10510 -- Switching backend |
18:18 |
ShadowBot |
Krock: Error: That URL appears to have no HTML title within the first 4KB. |
18:18 |
Krock |
<3 pgimeno |
18:19 |
|
lisac joined #minetest-dev |
18:19 |
pgimeno |
a temporary solution while the bot is fixed :) |
18:19 |
Krock |
I love it. |
18:23 |
Krock |
sfan5: would it be possible that you meant "position vector" or "vector" here? https://github.com/minetest/minetest/pull/10512#discussion_r507188051 |
18:29 |
|
Fixer joined #minetest-dev |
18:41 |
|
mizux joined #minetest-dev |
18:42 |
sfan5 |
I meant to draw attention to the fact that it still says "tables" |
18:53 |
Krock |
ah. to me it looked like a suggestion |
18:54 |
|
lisac joined #minetest-dev |
19:06 |
|
fluxflux joined #minetest-dev |
19:10 |
|
lisac joined #minetest-dev |
19:18 |
|
lisac joined #minetest-dev |
19:40 |
|
Taoki joined #minetest-dev |
20:26 |
|
DS-minetest joined #minetest-dev |
20:54 |
|
DS-minetest joined #minetest-dev |
21:27 |
|
paramat joined #minetest-dev |
21:28 |
paramat |
merging trivial #10520 in 15 mins. will merge fairly trivial #10493 in 24 hrs if no objections |
21:28 |
ShadowBot |
paramat: Error: That URL appears to have no HTML title within the first 4KB. |
21:28 |
pgimeno |
https://github.com/minetest/minetest/pull/10520 -- Contributing doc: Minor improvements and a clarification by paramat |
21:28 |
ShadowBot |
paramat: Error: That URL appears to have no HTML title within the first 4KB. |
21:28 |
pgimeno |
https://github.com/minetest/minetest/pull/10493 -- Devtest: Automatically enable zoom capability by paramat |
21:29 |
paramat |
thanks pgibot |
22:10 |
|
DS-minetest joined #minetest-dev |
22:16 |
|
Hecklechet joined #minetest-dev |
22:17 |
|
Hecklechet left #minetest-dev |
22:22 |
pgimeno |
lol |