blob: 993ac243fccf99431997cae565fce2085499a6e5 [file] [log] [blame]
Andrew Geissler595f6302022-01-24 19:11:47 +00001From d7217b79a4e125d4fcc1087743171b94d91d1121 Mon Sep 17 00:00:00 2001
Brad Bishop96ff1982019-08-19 13:50:42 -04002From: Inada Naoki <songofacandy@gmail.com>
3Date: Sat, 14 Jul 2018 00:46:11 +0900
4Subject: [PATCH] Use FLAG_REF always for interned strings
5
6Upstream-Status: Submitted [https://github.com/python/cpython/pull/8226]
7Signed-off-by: Joshua Watt <JPEWhacker@gmail.com>
Andrew Geissler6ce62a22020-11-30 19:58:47 -06008
Brad Bishop96ff1982019-08-19 13:50:42 -04009---
10 Python/marshal.c | 9 +++++++--
11 1 file changed, 7 insertions(+), 2 deletions(-)
12
13diff --git a/Python/marshal.c b/Python/marshal.c
Andrew Geissler595f6302022-01-24 19:11:47 +000014index 4125240..341c9aa 100644
Brad Bishop96ff1982019-08-19 13:50:42 -040015--- a/Python/marshal.c
16+++ b/Python/marshal.c
Andrew Geissler6ce62a22020-11-30 19:58:47 -060017@@ -298,9 +298,14 @@ w_ref(PyObject *v, char *flag, WFILE *p)
Brad Bishop96ff1982019-08-19 13:50:42 -040018 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 Geissler6ce62a22020-11-30 19:58:47 -060032 entry = _Py_hashtable_get_entry(p->hashtable, v);
Brad Bishop96ff1982019-08-19 13:50:42 -040033 if (entry != NULL) {