Andrew Geissler | 6ce62a2 | 2020-11-30 19:58:47 -0600 | [diff] [blame] | 1 | From 9f63e83b1cec872917647b11155edaffe399d103 Mon Sep 17 00:00:00 2001 |
Brad Bishop | 96ff198 | 2019-08-19 13:50:42 -0400 | [diff] [blame] | 2 | From: Inada Naoki <songofacandy@gmail.com> |
| 3 | Date: Sat, 14 Jul 2018 00:46:11 +0900 |
| 4 | Subject: [PATCH] Use FLAG_REF always for interned strings |
| 5 | |
| 6 | Upstream-Status: Submitted [https://github.com/python/cpython/pull/8226] |
| 7 | Signed-off-by: Joshua Watt <JPEWhacker@gmail.com> |
Andrew Geissler | 6ce62a2 | 2020-11-30 19:58:47 -0600 | [diff] [blame] | 8 | |
Brad Bishop | 96ff198 | 2019-08-19 13:50:42 -0400 | [diff] [blame] | 9 | --- |
| 10 | Python/marshal.c | 9 +++++++-- |
| 11 | 1 file changed, 7 insertions(+), 2 deletions(-) |
| 12 | |
| 13 | diff --git a/Python/marshal.c b/Python/marshal.c |
Andrew Geissler | 6ce62a2 | 2020-11-30 19:58:47 -0600 | [diff] [blame] | 14 | index c4538bd..2437160 100644 |
Brad Bishop | 96ff198 | 2019-08-19 13:50:42 -0400 | [diff] [blame] | 15 | --- a/Python/marshal.c |
| 16 | +++ b/Python/marshal.c |
Andrew Geissler | 6ce62a2 | 2020-11-30 19:58:47 -0600 | [diff] [blame] | 17 | @@ -298,9 +298,14 @@ w_ref(PyObject *v, char *flag, WFILE *p) |
Brad Bishop | 96ff198 | 2019-08-19 13:50:42 -0400 | [diff] [blame] | 18 | if (p->version < 3 || p->hashtable == NULL) |
| 19 | return 0; /* not writing object references */ |
| 20 | |
| 21 | - /* if it has only one reference, it definitely isn't shared */ |
| 22 | - if (Py_REFCNT(v) == 1) |
| 23 | + /* If it has only one reference, it definitely isn't shared. |
| 24 | + * But we use TYPE_REF always for interned string, to PYC file stable |
| 25 | + * as possible. |
| 26 | + */ |
| 27 | + if (Py_REFCNT(v) == 1 && |
| 28 | + !(PyUnicode_CheckExact(v) && PyUnicode_CHECK_INTERNED(v))) { |
| 29 | return 0; |
| 30 | + } |
| 31 | |
Andrew Geissler | 6ce62a2 | 2020-11-30 19:58:47 -0600 | [diff] [blame] | 32 | entry = _Py_hashtable_get_entry(p->hashtable, v); |
Brad Bishop | 96ff198 | 2019-08-19 13:50:42 -0400 | [diff] [blame] | 33 | if (entry != NULL) { |