diff options
Diffstat (limited to 'Python')
-rw-r--r-- | Python/codecs.c | 7 | ||||
-rw-r--r-- | Python/import.c | 8 |
2 files changed, 11 insertions, 4 deletions
diff --git a/Python/codecs.c b/Python/codecs.c index c7f4a9c..90f1cf6 100644 --- a/Python/codecs.c +++ b/Python/codecs.c @@ -821,9 +821,10 @@ PyCodec_SurrogatePassErrors(PyObject *exc) /* Try decoding a single surrogate character. If there are more, let the codec call us again. */ p += start; - if ((p[0] & 0xf0) == 0xe0 || - (p[1] & 0xc0) == 0x80 || - (p[2] & 0xc0) == 0x80) { + if (strlen(p) > 2 && + ((p[0] & 0xf0) == 0xe0 || + (p[1] & 0xc0) == 0x80 || + (p[2] & 0xc0) == 0x80)) { /* it's a three-byte code */ ch = ((p[0] & 0x0f) << 12) + ((p[1] & 0x3f) << 6) + (p[2] & 0x3f); if (ch < 0xd800 || ch > 0xdfff) diff --git a/Python/import.c b/Python/import.c index beb0eec..f655e51 100644 --- a/Python/import.c +++ b/Python/import.c @@ -1172,15 +1172,21 @@ write_compiled_module(PyCodeObject *co, char *cpathname, struct stat *srcstat) FILE *fp; char *dirpath; time_t mtime = srcstat->st_mtime; + int saved; #ifdef MS_WINDOWS /* since Windows uses different permissions */ mode_t mode = srcstat->st_mode & ~S_IEXEC; + /* Issue #6074: We ensure user write access, so we can delete it later + * when the source file changes. (On POSIX, this only requires write + * access to the directory, on Windows, we need write access to the file + * as well) + */ + mode |= _S_IWRITE; #else mode_t mode = srcstat->st_mode & ~S_IXUSR & ~S_IXGRP & ~S_IXOTH; mode_t dirmode = (srcstat->st_mode | S_IXUSR | S_IXGRP | S_IXOTH | S_IWUSR | S_IWGRP | S_IWOTH); #endif - int saved; /* Ensure that the __pycache__ directory exists. */ dirpath = rightmost_sep(cpathname); |