[PATCH] improve checks on usernames V3.
Denys Vlasenko
vda.linux at googlemail.com
Wed Aug 10 10:43:29 UTC 2011
On Tue, Aug 9, 2011 at 7:33 PM, Rich Felker <dalias at aerifal.cx> wrote:
> On Tue, Aug 09, 2011 at 09:37:58AM +0200, Denys Vlasenko wrote:
>> #define isalnum(a) bb_ascii_isalnum(a)
>> static ALWAYS_INLINE int bb_ascii_isalnum(unsigned char a)
>> {
>> unsigned char b = a - '0';
>> if (b <= 9)
>> return (b <= 9);
>> b = (a|0x20) - 'a';
>> return b <= 'z' - 'a';
>> }
>
> I'm scared to ask why this is written in such an obfuscated way rather
> than just
>
> return a-'0'<10U || (a|32)-'a'<26U;
Tried it. Bloatcheck:
function old new delta
next_token 842 912 +70
parse_dollar 731 782 +51
grep_file 1198 1241 +43
do_cmd 4284 4320 +36
expand 659 683 +24
buffer_fill_and_print 179 196 +17
gethdr 153 169 +16
find_range 522 538 +16
act 181 197 +16
sane_address 67 79 +12
sane 57 69 +12
is_well_formed_var_name 66 78 +12
httpd_main 763 775 +12
kill_main 906 917 +11
skip_thing 289 299 +10
setlocalenv 89 99 +10
handle_errors 69 79 +10
endofname 48 58 +10
readtoken1 3204 3212 +8
is_assignment 136 144 +8
get_key 466 474 +8
bb_strtoull 76 84 +8
bb_strtoul 78 86 +8
bb_strtoll 84 92 +8
bb_strtol 85 93 +8
BB_isalnum 39 47 +8
tftpd_main 546 551 +5
lzo1x_optimize 1429 1434 +5
fail_hunk 129 132 +3
xstrtoul_range_sfx 230 231 +1
decode_one_format 715 713 -2
bb__parsespent 119 117 -2
test_main 253 247 -6
pstree_main 318 312 -6
varvalue 760 752 -8
lzo1x_1_compress 240 231 -9
lzo1x_1_15_compress 240 231 -9
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 30/7 up/down: 466/-42) Total: 424 bytes
Example of code difference:
00000000 <BB_isalnum>:
31 c9 xor %ecx,%ecx
3d ff 00 00 00 cmp $0xff,%eax
-77 1b ja 24 <BB_isalnum+0x24>
+77 23 ja 2c <BB_isalnum+0x2c>
88 c2 mov %al,%dl
-8d 42 d0 lea -0x30(%edx),%eax
+0f b6 c0 movzbl %al,%eax
+83 e8 30 sub $0x30,%eax
b9 01 00 00 00 mov $0x1,%ecx
-3c 09 cmp $0x9,%al
-76 0d jbe 24 <BB_isalnum+0x24>
+83 f8 09 cmp $0x9,%eax
+76 11 jbe 2c <BB_isalnum+0x2c>
83 ca 20 or $0x20,%edx
-8d 42 9f lea -0x61(%edx),%eax
+0f b6 c2 movzbl %dl,%eax
+83 e8 61 sub $0x61,%eax
31 c9 xor %ecx,%ecx
-3c 19 cmp $0x19,%al
+83 f8 19 cmp $0x19,%eax
0f 96 c1 setbe %cl
88 c8 mov %cl,%al
c3 ret
More information about the busybox
mailing list