)]}'
{
  "commit": "e3aa4adf54f644ca0cb35f1f1fb19b239c40ef04",
  "tree": "71ec7e1981fe7fa9026e21e969b8d7e53b7fc63d",
  "parents": [
    "8f690f22cf1c026c950adddf3d45258bfd0912f0"
  ],
  "author": {
    "name": "Marcel van Lohuizen",
    "email": "mpvl@golang.org",
    "time": "Thu Feb 18 08:31:59 2021 +0100"
  },
  "committer": {
    "name": "Marcel van Lohuizen",
    "email": "mpvl@golang.org",
    "time": "Sat Feb 27 10:58:05 2021 +0000"
  },
  "message": "language: allow variable number of types per key in -u- extension\n\nThis also fixes CVE-2020-28851. This was an off-by one\nerror, but is fixed by handling all cases according to the spec.\n\nThese valid case seem to be not used in practice much,\nif at all, but the main benefit is that it makes all valid BCP 47\nlanguage tags also valid -u extensions. Fixing the code\nto handle BCP 47 results in cleaner and seemingly more\nrobust code.\n\nThe main difference is as follows. The old impementation\nassumed a -u- extension of the form:\n\n    \u003ctag\u003e \"-u\"  { \"-\" \u003cattr\u003e } { \"-\" \u003ckey\u003e \"-\" \u003ctype\u003e } [ \u003cotherExtensions\u003e ]\n\nwhere \u003cattr\u003e and \u003ctype\u003e are of length 3-8 and a \u003ckey\u003e is of length 2.\n\nAccording to the spec, though, the format is\n\n    \u003ctag\u003e \"-u\"  { \"-\" \u003cattr\u003e } { \"-\" \u003ckey\u003e { \"-\" \u003ctype\u003e } } [ \u003cotherExtensions\u003e ]\n\nSo every key may be associated with zero or more types, instead of\nexactly one.\n\nThe new code now handles this.\n\nThe language.Tag.TypeForKey method is now defined to only\nreturn the first entry or nothing at all. This is for backwards\ncompatibilty reasons.\n\nFixes golang/go#42535\n\nChange-Id: I23aec4e1c4d8807fc2ffc0eb3a08de2d8150219f\nReviewed-on: https://go-review.googlesource.com/c/text/+/293549\nTrust: Marcel van Lohuizen \u003cmpvl@golang.org\u003e\nRun-TryBot: Marcel van Lohuizen \u003cmpvl@golang.org\u003e\nTryBot-Result: Go Bot \u003cgobot@golang.org\u003e\nReviewed-by: Russ Cox \u003crsc@golang.org\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "1e74d1affd27b5011a1342ab054add830fde8e93",
      "old_mode": 33188,
      "old_path": "internal/language/language.go",
      "new_id": "f41aedcfc8aaf1db50211c0b75bbafa157ce0f23",
      "new_mode": 33188,
      "new_path": "internal/language/language.go"
    },
    {
      "type": "modify",
      "old_id": "6c7c10836008f0b30a25e68c791567d6c6a1496e",
      "old_mode": 33188,
      "old_path": "internal/language/language_test.go",
      "new_id": "8244c1c8a3696ea86e38f86405748795a1cd4b53",
      "new_mode": 33188,
      "new_path": "internal/language/language_test.go"
    },
    {
      "type": "modify",
      "old_id": "a2fdad89db43e739910b71dfca8f1a0814f7c096",
      "old_mode": 33188,
      "old_path": "internal/language/parse.go",
      "new_id": "c696fd0bd867dbbac347721ad862055d8f177718",
      "new_mode": 33188,
      "new_path": "internal/language/parse.go"
    },
    {
      "type": "modify",
      "old_id": "0cc97d7a5cef3f5fe904aed145fa4db896c9c902",
      "old_mode": 33188,
      "old_path": "internal/language/parse_test.go",
      "new_id": "e1d428aa62766d69f4c0ee777050fbbd9060de18",
      "new_mode": 33188,
      "new_path": "internal/language/parse_test.go"
    },
    {
      "type": "modify",
      "old_id": "abfa17f66db1cb38f3cf6c9997bdb0ab9fe9dddd",
      "old_mode": 33188,
      "old_path": "language/language.go",
      "new_id": "289b3a36d524b618b37e68fcef30ff0a750aefd6",
      "new_mode": 33188,
      "new_path": "language/language.go"
    },
    {
      "type": "modify",
      "old_id": "f7711ba345bf4f2ccbafb188c764d871634c1cc8",
      "old_mode": 33188,
      "old_path": "language/language_test.go",
      "new_id": "b2e3ce3c53b95d7bf17ffdf2ce5c4a5d02655b83",
      "new_mode": 33188,
      "new_path": "language/language_test.go"
    },
    {
      "type": "modify",
      "old_id": "041660c4e37cc205a69c68c9ba8e7e6deafb8f06",
      "old_mode": 33188,
      "old_path": "language/parse_test.go",
      "new_id": "4b7e64db3260fba95ac98839793a30f756d71a85",
      "new_mode": 33188,
      "new_path": "language/parse_test.go"
    }
  ]
}
