xfsprogs: metadump: use pointers in generate_obfuscated_name()
PATCH v3 7/16 xfsprogs: metadump: use pointers in generate_obfuscated_name()
Switch from using array references to using pointers to refer to the pathname characters as they get generated. Also limit the scope of a few automatic variables.
The only update since the last post version is the addition of an ASSERT() in the loop generating the last 5 bytes.
--- db/metadump.c | 35 +++++++++++++++++++---------------- 1 file changed, 19 insertions(+), 16 deletions(-)
db/metadump.c +19 -16
@@ -437,11 +437,8 @@ generate_obfuscated_name( {xfs_dahash_t hash;name_ent_t *p; -int i;int dup; -xfs_dahash_t newhash;uchar_t newname[NAME_MAX ]; -uchar_t *newp = &newname[0 ];/* * Our obfuscation algorithm requires at least 5-character
@@ -472,7 +469,12 @@ generate_obfuscated_name( hash =libxfs_da_hashname (name, namelen); do { - uchar_t high_bit; + int i; + xfs_dahash_t newhash = 0; + uchar_t *newp = &newname[0]; + uchar_t *first; + uchar_t high_bit; + int shift; dup = 0;
@@ -482,10 +484,10 @@ generate_obfuscated_name(* characters. Accumulate its new hash value as we * go. */ - newhash =0 ;for (i =0 ; i < namelen -5 ; i++) { - newp[i] =random_filename_char (); - newhash = newp[i] ^rol32 (newhash,7 ); + *newp =random_filename_char (); + newhash = *newp ^rol32 (newhash,7 ); + newp++; }/*
@@ -500,16 +502,17 @@ generate_obfuscated_name(*/ newhash =rol32 (newhash,3 ) ^ hash; + first = newp; high_bit =0 ; -for (i =5 ; i >0 ; i--) { -int shift = (i -1 ) *7 ; - - newp[namelen - i] = ((newhash >> shift) &0x7f ) ^ high_bit; -if (is_invalid_char (newp[namelen - i])) { - newp[namelen - i] ^=1 ; +for (shift =28 ; shift >=0 ; shift -=7 ) { + *newp = (newhash >> shift &0x7f ) ^ high_bit; +if (is_invalid_char (*newp)) { + *newp ^=1 ; high_bit =0x80 ; }else high_bit =0 ; +ASSERT (!is_invalid_char (*newp)); + newp++; }/*
@@ -522,15 +525,15 @@ generate_obfuscated_name(* worry about it becoming invalid as a result. */ if (high_bit) { - newp[namelen -5 ] ^=0x10 ; -ASSERT (!is_invalid_char (newp[namelen -5 ])); + *first ^=0x10 ; +ASSERT (!is_invalid_char (*first)); }ASSERT (libxfs_da_hashname (newname, namelen) == hash);for (p = nametable[hash %NAME_TABLE_SIZE ]; p; p = p->next) {if (p->hash == hash && p->namelen == namelen && -memcmp (p->name, newname, namelen) ==0 ){ + !memcmp (p->name, newname, namelen)) { dup =1 ;break ; }
_______________________________________________
xfs mailing list
[email protected]
http://oss.sgi.com/mailman/listinfo/xfs
Quoted 8 lines · Alex Elder
Switch from using array references to using pointers to refer to the pathname characters as they get generated. Also limit the scope of a few automatic variables.
Signed-off-by Alex Elder <[email protected]>The only update since the last post version is the addition of an
ASSERT()in the loop generating the last 5 bytes.
One small comment below, otherwise:
Quoted 4 lines
db/metadump.c +0
-0@@ -500,16 +502,17 @@ generate_obfuscated_name(*/ newhash =rol32 (newhash,3 ) ^ hash;
db/metadump.c generate_obfuscated_name( · line 508
Quoted 10 lines
db/metadump.c +3
-6+ first = newp; high_bit =0 ; -for (i =5 ; i >0 ; i--) { -int shift = (i -1 ) *7 ; - - newp[namelen - i] = ((newhash >> shift) &0x7f ) ^ high_bit; -if (is_invalid_char (newp[namelen - i])) { - newp[namelen - i] ^=1 ; +for (shift =28 ; shift >=0 ; shift -=7 ) { + *newp = (newhash >> shift &0x7f ) ^ high_bit;
I'd prefer not to have to refer to my C bible to remind myself what the precedence of ">>" vs "&" is, so perhaps leaving the second set of () in this statement would be a good idea.
Cheers,
Dave.
Signature · 7 lines
Dave Chinner [email protected] _______________________________________________ xfs mailing list [email protected] http://oss.sgi.com/mailman/listinfo/xfs
PATCH v4 7/16 xfsprogs: metadump: use pointers in generate_obfuscated_name()
. . .
Quoted 8 lines
One small comment below, otherwise:
Reviewed-by Dave Chinner <[email protected]>Quoted 4 lines
db/metadump.c +0
-0@@ -500,16 +502,17 @@ generate_obfuscated_name(*/ newhash =rol32 (newhash,3 ) ^ hash;
Quoted 14 lines
db/metadump.c generate_obfuscated_name( · line 508
Quoted 10 lines
db/metadump.c +3
-6+ first = newp; high_bit =0 ; -for (i =5 ; i >0 ; i--) { -int shift = (i -1 ) *7 ; - - newp[namelen - i] = ((newhash >> shift) &0x7f ) ^ high_bit; -if (is_invalid_char (newp[namelen - i])) { - newp[namelen - i] ^=1 ; +for (shift =28 ; shift >=0 ; shift -=7 ) { + *newp = (newhash >> shift &0x7f ) ^ high_bit;I'd prefer not to have to refer to my C bible to remind myself what the precedence of ">>" vs "&" is, so perhaps leaving the second set of () in this statement would be a good idea.
Done.
_______________________________________________
xfs mailing list
[email protected]
http://oss.sgi.com/mailman/listinfo/xfs