SteamKit
SteamKit copied to clipboard
KeyValue: Handle (ignore) conditionals
As pointed out by @xPaw, we crash when reading tf_english.txt.
I narrowed this down to our handling of conditionals - it's completely broken. We count the conditional as a key, then read the next key as a value, etc. until our keys and values are swapped.
Therefore, an empty value after a conditional will trigger the exception that fails a parse on an empty key.
I don't think this is necessarily the best way to handle them, but at least it doesn't crash :smile:
Do not merge (yet), I'm only posting this for discussion. How do we want to handle conditionals, and is this the best way?
I think I can see some implementation flaws in this code (i.e. the green part of the diff) but it's getting late and I need to go to bed so I'm stopping for tonight. I know it's not perfect.
Previous PR and discussion at #232.
Worth pointing out that @yaakov-h wrote a different keyvalue parser and it has good test coverage: https://github.com/SteamDatabase/ValveKeyValue
I only did that after stumbling across this and needing a better solution. 😄