| From 9f63e83b1cec872917647b11155edaffe399d103 Mon Sep 17 00:00:00 2001 |
| From: Inada Naoki <songofacandy@gmail.com> |
| Date: Sat, 14 Jul 2018 00:46:11 +0900 |
| Subject: [PATCH] Use FLAG_REF always for interned strings |
| |
| Upstream-Status: Submitted [https://github.com/python/cpython/pull/8226] |
| Signed-off-by: Joshua Watt <JPEWhacker@gmail.com> |
| |
| --- |
| Python/marshal.c | 9 +++++++-- |
| 1 file changed, 7 insertions(+), 2 deletions(-) |
| |
| diff --git a/Python/marshal.c b/Python/marshal.c |
| index c4538bd..2437160 100644 |
| --- a/Python/marshal.c |
| +++ b/Python/marshal.c |
| @@ -298,9 +298,14 @@ w_ref(PyObject *v, char *flag, WFILE *p) |
| if (p->version < 3 || p->hashtable == NULL) |
| return 0; /* not writing object references */ |
| |
| - /* if it has only one reference, it definitely isn't shared */ |
| - if (Py_REFCNT(v) == 1) |
| + /* If it has only one reference, it definitely isn't shared. |
| + * But we use TYPE_REF always for interned string, to PYC file stable |
| + * as possible. |
| + */ |
| + if (Py_REFCNT(v) == 1 && |
| + !(PyUnicode_CheckExact(v) && PyUnicode_CHECK_INTERNED(v))) { |
| return 0; |
| + } |
| |
| entry = _Py_hashtable_get_entry(p->hashtable, v); |
| if (entry != NULL) { |