)]}'
{
  "commit": "a4954e5ace867ed88633c1380a61ca72f62a2bab",
  "tree": "adc95212a9c77b5ee0306f699f7cd5596ea876cb",
  "parents": [
    "c509ee3fa27d191b23da353d363c396ef7bdecdb"
  ],
  "author": {
    "name": "David Benjamin",
    "email": "davidben@google.com",
    "time": "Wed Nov 11 15:11:45 2020 -0500"
  },
  "committer": {
    "name": "Adam Langley",
    "email": "agl@google.com",
    "time": "Thu Nov 12 18:20:43 2020 +0000"
  },
  "message": "Remove the legacy MSTRING M_ASN1 macros.\n\nThe free and dup macros are fine and can be replaced with their function\ncounterparts, but the new macros call ASN1_STRING_type_new with a\nrepresentative type in the CHOICE. This does not match what the\ncorresponding functions (e.g. ASN1_TIME_new) do.\n\nThe functions go through tasn_new.c and end up at ASN1_primitive_new.\nThat ends up creating an ASN1_STRING with type -1 and the\nASN1_STRING_FLAG_MSTRING flag set. X509_time_adj_ex uses the flag to\ndetermine whether to trigger X.509\u0027s UTCTime vs GeneralizedTime\nswitching.\n\nConfusingly, ASN1_TIME_adj, ASN1_UTCTIME_adj, and\nASN1_GENERALIZEDTIME_adj trigger this behavior based on the function\nitself. That seems more robust (X509_set1_notBefore might accidentally\nlose the flag), so maybe we can remove this flag. In the meantime, at\nleast remove the old macros so we don\u0027t create the wrong type.\n\nUpdate-Note: Some M_ASN1 macros were removed. Code search says there\nwere no uses, and OpenSSL upstream removed all of them.\n\nChange-Id: Iffa63f2624c38e64679207720c5ebd5241da644c\nReviewed-on: https://boringssl-review.googlesource.com/c/boringssl/+/44047\nReviewed-by: Adam Langley \u003cagl@google.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "27753033ecf42533526168e18d2abfd7cd036299",
      "old_mode": 33188,
      "old_path": "include/openssl/asn1.h",
      "new_id": "c2eddf885fb1cce2a09629cc66e2e99f22b62be3",
      "new_mode": 33188,
      "new_path": "include/openssl/asn1.h"
    }
  ]
}
