### Re^5: Hash key composition with a comma?

by LanX (Archbishop)
 on Mar 18, 2018 at 00:39 UTC ( #1211167=note: print w/replies, xml ) Need Help??

in reply to Re^4: Hash key composition with a comma?
in thread Hash key composition with a comma?

I second you, cause it's very hard to construct a scenario where multi dim hashes cause a bug, even if the programmer was so naive to allow random keys.

And the statement:

> If your data contains the separator-character, the code breaks.

Is not true. The constructed key would have more separator characters but wouldn't "break".

I'd really like to see a believable example, maybe I am missing something?

Cheers Rolf
(addicted to the Perl Programming Language and ☆☆☆☆ :)
Wikisyntax for the Monastery

• Comment on Re^5: Hash key composition with a comma?

Replies are listed 'Best First'.
Re^6: Hash key composition with a comma?
by choroba (Bishop) on Mar 18, 2018 at 09:46 UTC
Not sure if believable, but imagine
```my \$k1a = "a\$;b";
my \$k1b = 'c';
my \$k2a = 'a';
my \$k2b = "b\$;c";

\$multi{\$k1a, \$k1b} = 1;
\$multi{\$k2a, \$k2b} = 2;

print \$multi{\$k1a, \$k1b};  # 2!!
```(\$q=q:Sq=~/;[c](.)(.)/;chr(-||-|5+lengthSq)`"S|oS2"`map{chr |+ord
}map{substrSq`S_+|`|}3E|-|`7**2-3:)=~y+S|`+\$1,++print+eval\$q,q,a,
Yes that's pretty much the example I came up with, only after thinking hard.

"Karl-Heinz Urban" and "Karl Heinz-Urban" would get the same entry for \$age{\$first,\$family} if \$; was "-" and consequently a Hollywood actor would change age. (This never happens normally ;)

But you first need to construct such a collision which results in data loss.

Intuition (and AM) says "one injected delimiter and it breaks" like \$b='x"y';eval qq {\$a="\$b"} breaks.

But that's not the case, you need a coincidence where both keys are polluted in a very specific way.

And a hash with polluted entries will continue to work normally as long as Mr "Heinz-Urban" doesn't show up.

I'd like to see a more believable scenario.

NB: Of course I wouldn't allow polluted keys in the first way.

Cheers Rolf
(addicted to the Perl Programming Language and ☆☆☆☆ :)
Wikisyntax for the Monastery

PS : AM is thanking you for doing his "homework"! ;)

I haven't researched this, but a coworker just suggested to me that a credible cause of this in the wild might be some unicode pollution in input expected to be ascii.

If she's right, perhaps it's not so far-fetched.

-sauoq
"My two cents aren't worth a dime.";
I'm not sure about other encodings, but in UTF-8, all non-ASCII characters are represented by bytes > x7F, so x1c can't occur.
```(\$q=q:Sq=~/;[c](.)(.)/;chr(-||-|5+lengthSq)`"S|oS2"`map{chr |+ord
}map{substrSq`S_+|`|}3E|-|`7**2-3:)=~y+S|`+\$1,++print+eval\$q,q,a,

Create A New User
Node Status?
node history
Node Type: note [id://1211167]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others rifling through the Monastery: (6)
As of 2019-10-21 02:38 GMT
Sections?
Information?
Find Nodes?
Leftovers?
Voting Booth?
In 2019 the site I miss most is:

Results (50 votes). Check out past polls.

Notices?