!5 Update to 5.10.1

From: @starlet-dx 
Reviewed-by: @caodongxia 
Signed-off-by: @caodongxia
This commit is contained in:
openeuler-ci-bot 2023-05-16 08:00:15 +00:00 committed by Gitee
commit 2d38d00a01
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
6 changed files with 8 additions and 359 deletions

View File

@ -1,81 +0,0 @@
From 22ad4f7200a56da969e9296d8fecf2f0b8368afc Mon Sep 17 00:00:00 2001
From: Dan Yeaw <dyeaw@ford.com>
Date: Mon, 23 Dec 2019 15:31:04 -0500
Subject: [PATCH] Bootloader: Fix GCC warnings for strncpy and strncat.
Fixes Issue #4196. GCC 8.1 and later added checks to prevent using
strncpy and strncat with the bounds depending on the length of the
source str. In order to fix this, a few approaches were made:
1. Where guards already existed to ensure that added paths weren't
larger than the PATH_MAX, changed to strcpy / strcat which don't take a
length parameter.
2. Where path length checks didn't exist, set the bounds of the strncpy
and strncat to PATH_MAX.
Signed-off-by: Dan Yeaw <dyeaw@ford.com>
---
bootloader/src/pyi_path.c | 7 ++++---
bootloader/src/pyi_pythonlib.c | 12 ++++++------
2 files changed, 10 insertions(+), 9 deletions(-)
diff --git a/bootloader/src/pyi_path.c b/bootloader/src/pyi_path.c
index a449f79..d36e3d2 100644
--- a/bootloader/src/pyi_path.c
+++ b/bootloader/src/pyi_path.c
@@ -56,7 +56,7 @@ pyi_path_dirname(char *result, const char *path)
char *match = NULL;
/* Copy path to result and then just write '\0' to the place with path separator. */
- strncpy(result, path, strlen(path) + 1);
+ strncpy(result, path, PATH_MAX);
/* Remove separator from the end. */
len = strlen(result);
@@ -143,7 +143,7 @@ pyi_path_join(char *result, const char *path1, const char *path2)
memset(result, 0, PATH_MAX);
}
/* Copy path1 to result without null terminator */
- strncpy(result, path1, strlen(path1));
+ strcpy(result, path1);
/* Append trailing slash if missing. */
len = strlen(result);
@@ -156,7 +156,8 @@ pyi_path_join(char *result, const char *path1, const char *path2)
if (path2[len - 1] == PYI_SEP) {
/* Append path2 without slash. */
- strncat(result, path2, len - 2);
+ strcat(result, path2);
+ result[strlen(result) - 1] = PYI_NULLCHAR;
}
else {
/* path2 does not end with slash. */
diff --git a/bootloader/src/pyi_pythonlib.c b/bootloader/src/pyi_pythonlib.c
index ee4b3b2..d90c239 100644
--- a/bootloader/src/pyi_pythonlib.c
+++ b/bootloader/src/pyi_pythonlib.c
@@ -480,15 +480,15 @@ pyi_pylib_start_python(ARCHIVE_STATUS *status)
/* Set sys.path */
if (is_py2) {
/* sys.path = [mainpath] */
- strncpy(pypath, status->mainpath, strlen(status->mainpath));
+ strncpy(pypath, status->mainpath, PATH_MAX);
}
else {
/* sys.path = [base_library, mainpath] */
- strncpy(pypath, status->mainpath, strlen(status->mainpath));
- strncat(pypath, PYI_SEPSTR, strlen(PYI_SEPSTR));
- strncat(pypath, "base_library.zip", strlen("base_library.zip"));
- strncat(pypath, PYI_PATHSEPSTR, strlen(PYI_PATHSEPSTR));
- strncat(pypath, status->mainpath, strlen(status->mainpath));
+ strncpy(pypath, status->mainpath, PATH_MAX);
+ strncat(pypath, PYI_SEPSTR, PATH_MAX);
+ strncat(pypath, "base_library.zip", PATH_MAX);
+ strncat(pypath, PYI_PATHSEPSTR, PATH_MAX);
+ strncat(pypath, status->mainpath, PATH_MAX);
};
/*
--
2.23.0

Binary file not shown.

View File

@ -1,63 +0,0 @@
From a95fbb0f497680cce0a097aa3a143e84943b903f Mon Sep 17 00:00:00 2001
From: Hartmut Goebel <h.goebel@crazy-compilers.com>
Date: Sun, 3 May 2020 15:26:43 +0200
Subject: [PATCH] Bootloader: Reimplement pyi_search_path using strtok().
This avoids some places where we need to cope with strncpy(= and related. Also
the implementation becomes much simpler.
---
bootloader/src/pyi_path.c | 34 +++++++---------------------------
1 file changed, 7 insertions(+), 27 deletions(-)
diff --git a/bootloader/src/pyi_path.c b/bootloader/src/pyi_path.c
index 8736de8cc5..fb417e9269 100644
--- a/bootloader/src/pyi_path.c
+++ b/bootloader/src/pyi_path.c
@@ -205,40 +205,20 @@ pyi_path_exists(char * path)
int
pyi_search_path(char * result, const char * appname)
{
- char * path = pyi_getenv("PATH");
- char dirname[PATH_MAX + 1];
- char filename[PATH_MAX + 1];
+ char *path = pyi_getenv("PATH"); // returns a copy
+ char *dirname;
if (NULL == path) {
return -1;
}
- while (1) {
- char *delim = strchr(path, PYI_PATHSEP);
-
- if (delim) {
- size_t len = delim - path;
-
- if (len > PATH_MAX) {
- len = PATH_MAX;
- }
- strncpy(dirname, path, len);
- *(dirname + len) = '\0';
- }
- else { /* last $PATH element */
- strncpy(dirname, path, PATH_MAX);
- }
- pyi_path_join(filename, dirname, appname);
-
- if (pyi_path_exists(filename)) {
- strncpy(result, filename, PATH_MAX);
+ dirname = strtok(path, PYI_PATHSEPSTR);
+ while (dirname != NULL) {
+ pyi_path_join(result, dirname, appname);
+ if (pyi_path_exists(result)) {
return 0;
}
-
- if (!delim) {
- break;
- }
- path = delim + 1;
+ dirname = strtok(NULL, PYI_PATHSEPSTR);
}
return -1;
}

View File

@ -1,208 +0,0 @@
From b4c0d01e751975090fa7346a2a71dd778c3b412c Mon Sep 17 00:00:00 2001
From: Hartmut Goebel <h.goebel@crazy-compilers.com>
Date: Sun, 3 May 2020 15:43:52 +0200
Subject: [PATCH] Bootloader: Use snprintf() to simplify some string length
checks.
Instead of copying strings and checking whether the string si terminated with
a Null bytes, use snprintf, which tells how much space the new string would
have taken and compare this to the available space.
Since snprintf() add some overhead, This code might be a bit less efficient.
But this sie the bootloader, and most of the functions are called once only.
---
bootloader/src/pyi_archive.c | 21 ++++++++-------------
bootloader/src/pyi_launch.c | 27 +++++++++------------------
bootloader/src/pyi_main.c | 4 ++--
bootloader/src/pyi_path.c | 3 +--
bootloader/src/pyi_pythonlib.c | 14 +++++++++-----
bootloader/src/pyi_utils.c | 7 ++-----
6 files changed, 31 insertions(+), 45 deletions(-)
diff --git a/bootloader/src/pyi_archive.c b/bootloader/src/pyi_archive.c
index ed886e09fb..32b129fb98 100644
--- a/bootloader/src/pyi_archive.c
+++ b/bootloader/src/pyi_archive.c
@@ -455,28 +455,23 @@ int
pyi_arch_set_paths(ARCHIVE_STATUS *status, char const * archivePath,
char const * archiveName)
{
- size_t pathlen, namelen;
-
- pathlen = strnlen(archivePath, PATH_MAX);
- namelen = strnlen(archiveName, PATH_MAX);
-
- if (pathlen+namelen+1 > PATH_MAX) {
- return -1;
+ /* Set homepath to where the archive is */
+ if (snprintf(status->homepath, PATH_MAX, "%s", archivePath) >= PATH_MAX) {
+ return -1;
}
/* Get the archive Path */
- strcpy(status->archivename, archivePath);
- strcat(status->archivename, archiveName);
-
- /* Set homepath to where the archive is */
- strcpy(status->homepath, archivePath);
+ if (snprintf(status->archivename, PATH_MAX,
+ "%s%s", archivePath, archiveName) >= PATH_MAX) {
+ return -1;
+ }
/*
* Initial value of mainpath is homepath. It might be overriden
* by temppath if it is available.
*/
status->has_temp_directory = false;
- strcpy(status->mainpath, status->homepath);
+ strcpy(status->mainpath, status->homepath); // homepath fits into PATH_MAX
return 0;
}
diff --git a/bootloader/src/pyi_launch.c b/bootloader/src/pyi_launch.c
index 3517be6353..432a43416f 100644
--- a/bootloader/src/pyi_launch.c
+++ b/bootloader/src/pyi_launch.c
@@ -79,15 +79,13 @@ checkFile(char *buf, const char *fmt, ...)
static int
splitName(char *path, char *filename, const char *item)
{
- char name[PATH_MAX + 1];
+ char name[PATH_MAX];
VS("LOADER: Splitting item into path and filename\n");
- strncpy(name, item, PATH_MAX + 1);
-
- if (name[PATH_MAX] != '\0') {
+ if (snprintf(name, PATH_MAX, "%s", item) >= PATH_MAX) {
return -1;
}
-
+ // `name` fits into PATH_MAX, so will all substrings
strcpy(path, strtok(name, ":"));
strcpy(filename, strtok(NULL, ":"));
@@ -148,13 +146,11 @@ _get_archive(ARCHIVE_STATUS *archive_pool[], const char *path)
return NULL;
}
- strncpy(archive->archivename, path, PATH_MAX);
- strncpy(archive->homepath, archive_pool[SELF]->homepath, PATH_MAX);
- strncpy(archive->temppath, archive_pool[SELF]->temppath, PATH_MAX);
-
- if (archive->archivename[PATH_MAX-1] != '\0'
- || archive->homepath[PATH_MAX-1] != '\0'
- || archive->temppath[PATH_MAX-1] != '\0') {
+ if ((snprintf(archive->archivename, PATH_MAX, "%s", path) >= PATH_MAX) ||
+ (snprintf(archive->homepath, PATH_MAX, "%s",
+ archive_pool[SELF]->homepath) >= PATH_MAX) ||
+ (snprintf(archive->temppath, PATH_MAX, "%s",
+ archive_pool[SELF]->temppath) >= PATH_MAX)) {
FATALERROR("Archive path exceeds PATH_MAX\n");
free(archive);
return NULL;
@@ -369,7 +365,6 @@ pyi_launch_run_scripts(ARCHIVE_STATUS *status)
{
unsigned char *data;
char buf[PATH_MAX];
- size_t namelen;
TOC * ptoc = status->tocbuff;
PyObject *__main__;
PyObject *__file__;
@@ -400,14 +395,10 @@ pyi_launch_run_scripts(ARCHIVE_STATUS *status)
data = pyi_arch_extract(status, ptoc);
/* Set the __file__ attribute within the __main__ module,
* for full compatibility with normal execution. */
- namelen = strnlen(ptoc->name, PATH_MAX);
- if (namelen >= PATH_MAX-strlen(".py")-1) {
+ if (snprintf(buf, PATH_MAX, "%s.py", ptoc->name) >= PATH_MAX) {
FATALERROR("Name exceeds PATH_MAX\n");
return -1;
}
-
- strcpy(buf, ptoc->name);
- strcat(buf, ".py");
VS("LOADER: Running %s\n", buf);
if (is_py2) {
diff --git a/bootloader/src/pyi_main.c b/bootloader/src/pyi_main.c
index 02b1bec5dc..472cd1ae9a 100644
--- a/bootloader/src/pyi_main.c
+++ b/bootloader/src/pyi_main.c
@@ -126,8 +126,8 @@ pyi_main(int argc, char * argv[])
* we pass it through status variable
*/
if (strcmp(homepath, extractionpath) != 0) {
- strncpy(archive_status->temppath, extractionpath, PATH_MAX);
- if (archive_status->temppath[PATH_MAX-1] != '\0') {
+ if (snprintf(archive_status->temppath, PATH_MAX,
+ "%s", extractionpath) >= PATH_MAX) {
VS("LOADER: temppath exceeds PATH_MAX\n");
return -1;
}
diff --git a/bootloader/src/pyi_path.c b/bootloader/src/pyi_path.c
index fb417e9269..6ed252ffab 100644
--- a/bootloader/src/pyi_path.c
+++ b/bootloader/src/pyi_path.c
@@ -286,8 +286,7 @@ pyi_path_executable(char *execfile, const char *appname)
if (-1 == result) {
/* Searching $PATH failed, user is crazy. */
VS("LOADER: Searching $PATH failed for %s", appname);
- strncpy(buffer, appname, PATH_MAX);
- if (buffer[PATH_MAX-1] != '\0') {
+ if (snprintf(buffer, PATH_MAX, "%s", "appname") >= PATH_MAX) {
VS("LOADER: Appname too large %s\n", appname);
return -1;
}
diff --git a/bootloader/src/pyi_pythonlib.c b/bootloader/src/pyi_pythonlib.c
index caffcd6daa..8144885b17 100644
--- a/bootloader/src/pyi_pythonlib.c
+++ b/bootloader/src/pyi_pythonlib.c
@@ -414,18 +414,16 @@ pyi_pylib_start_python(ARCHIVE_STATUS *status)
};
/* Set sys.path */
- if (is_py2) {
- /* sys.path = [mainpath] */
- strncpy(pypath, status->mainpath, PATH_MAX);
- }
- else {
- /* sys.path = [base_library, mainpath] */
+ /* sys.path = [base_library, mainpath] */
- strncpy(pypath, status->mainpath, PATH_MAX);
- strncat(pypath, PYI_SEPSTR, PATH_MAX);
- strncat(pypath, "base_library.zip", PATH_MAX);
- strncat(pypath, PYI_PATHSEPSTR, PATH_MAX);
- strncat(pypath, status->mainpath, PATH_MAX);
- };
+ if (snprintf(pypath, sizeof pypath, "%s%cbase_library.zip%c%s",
+ status->mainpath, PYI_SEP, PYI_PATHSEP, status->mainpath)
+ >= sizeof pypath) {
+ // This should never happen, since mainpath is < PATH_MAX and pypath is
+ // huge enough
+ FATALERROR("sys.path (based on %s) exceeds buffer[%d] space\n",
+ status->mainpath, sizeof pypath);
+ return -1;
+ }
/*
* On Python 3, we must set sys.path to have base_library.zip before
diff --git a/bootloader/src/pyi_utils.c b/bootloader/src/pyi_utils.c
index e18d611f26..0c89975908 100644
--- a/bootloader/src/pyi_utils.c
+++ b/bootloader/src/pyi_utils.c
@@ -557,11 +557,8 @@ pyi_open_target(const char *path, const char* name_)
char *dir;
size_t len;
- strncpy(fnm, path, PATH_MAX);
- strncpy(name, name_, PATH_MAX);
-
- /* Check if the path names could be copied */
- if (fnm[PATH_MAX-1] != '\0' || name[PATH_MAX-1] != '\0') {
+ if (snprintf(fnm, PATH_MAX, "%s", path) >= PATH_MAX ||
+ snprintf(name, PATH_MAX, "%s", name_) >= PATH_MAX) {
return NULL;
}

BIN
pyinstaller-5.10.1.tar.gz Normal file

Binary file not shown.

View File

@ -1,15 +1,13 @@
%global _empty_manifest_terminate_build 0
Name: python-pyinstaller
Version: 3.6
Version: 5.10.1
Release: 1
Summary: PyInstaller bundles a Python application and all its dependencies into a single package.
License: GPL license with a special exception which allows to use PyInstaller to build and distribute non-free programs (including commercial ones)
License: GPL-2.0-only
URL: http://www.pyinstaller.org
Source0: https://files.pythonhosted.org/packages/3c/c9/c3f9bc64eb11eee6a824686deba6129884c8cbdf70e750661773b9865ee0/PyInstaller-%{version}.tar.gz
Patch6000: Fix-Gcc-warnings-for-strncpy-and-strncat.patch
Patch6001: Reimplement-pyi-search-path-using-strtok.patch
Patch6002: Use-snprintf-to-simplify-some-string-len.patch
Source0: https://files.pythonhosted.org/packages/51/37/2e0195ef4e4dec35e3f116361c4c780e0c4cd2cd96079199b3218c08fabb/pyinstaller-%{version}.tar.gz
BuildRequires: python3-devel python3-setuptools zlib-devel
BuildRequires: python3-wheel
%description
PyInstaller bundles a Python application and all its dependencies into a single
@ -35,7 +33,7 @@ package. The user can run the packaged app without installing a Python
interpreter or any modules.
%prep
%autosetup -n PyInstaller-%{version} -p1
%autosetup -n pyinstaller-%{version} -p1
%build
%py3_build
@ -76,5 +74,8 @@ mv %{buildroot}/doclist.lst .
%{_pkgdocdir}
%changelog
* Tue May 16 2023 yaoxin <yao_xin001@hoperun.com> - 5.10.1-1
- Update to 5.10.1
* Mon Jun 22 2020 Python_Bot <Python_Bot@openeuler.org>
- Package Spec generated