Commit 3c7d67da authored by Emily's avatar Emily
Browse files

lib: deprecate `fromHexString` on dodgy inputs

parent 449ad44f
Loading
Loading
Loading
Loading
+7 −21
Original line number Diff line number Diff line
@@ -386,35 +386,21 @@ runTests {
    expected = 9223372036854775807;
  };

  testFromHexStringLeadingZeroes = {
    expr = fromHexString "00ffffffffffffff";
    expected = 72057594037927935;
  };

  testFromHexStringWithPrefix = {
    expr = fromHexString "0Xf";
    expr = fromHexString "0xf";
    expected = 15;
  };

  # FIXME: This might be bad and should potentially be deprecated.
  testFromHexStringQuestionableMixedCase = {
  testFromHexStringMixedCase = {
    expr = fromHexString "eEeEe";
    expected = 978670;
  };

  # FIXME: This is probably bad and should potentially be deprecated.
  testFromHexStringQuestionableUnderscore = {
    expr = fromHexString "F_f";
    expected = 255;
  };

  # FIXME: This is definitely bad and should be deprecated.
  testFromHexStringBadComment = {
    expr = fromHexString "0 # oops";
    expected = 0;
  };

  # FIXME: Oh my god.
  testFromHexStringAwfulInjection = {
    expr = fromHexString "1\nwhoops = {}";
    expected = 1;
  };

  testToBaseDigits = {
    expr = toBaseDigits 2 6;
    expected = [
+13 −6
Original line number Diff line number Diff line
@@ -1119,14 +1119,21 @@ in
    ```
  */
  fromHexString =
    value:
    str:
    let
      noPrefix = lib.strings.removePrefix "0x" (lib.strings.toLower value);
      match = builtins.match "(0x)?([0-7]?[0-9A-Fa-f]{1,15})" str;
    in
    if match != null then
      (builtins.fromTOML "v=0x${builtins.elemAt match 1}").v
    else
      # TODO: Turn this into a `throw` in 26.05.
      assert lib.warn "fromHexString: ${
        lib.generators.toPretty { } str
      } is not a valid input and will be rejected in 26.05" true;
      let
      parsed = builtins.fromTOML "v=0x${noPrefix}";
        noPrefix = lib.strings.removePrefix "0x" (lib.strings.toLower str);
      in
    parsed.v;
      (builtins.fromTOML "v=0x${noPrefix}").v;

  /**
    Convert the given positive integer to a string of its hexadecimal