fix various obj NULL derefs
This commit is contained in:
parent
de8726e842
commit
b77a5059f0
170
backport-Fix-various-obj-NULL-derefs.patch
Normal file
170
backport-Fix-various-obj-NULL-derefs.patch
Normal file
@ -0,0 +1,170 @@
|
|||||||
|
From a47f87c0a79015dc8c712b9713f2d2fd052405d1 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Reini Urban <rurban@cpan.org>
|
||||||
|
Date: Tue, 26 May 2020 15:48:19 +0200
|
||||||
|
Subject: [PATCH] Fix various obj NULL derefs
|
||||||
|
|
||||||
|
Reported by Petr Pisar [cpan #132711]
|
||||||
|
---
|
||||||
|
Bzip2.xs | 44 +++++++++++++++++++++++++++-----------------
|
||||||
|
1 file changed, 27 insertions(+), 17 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/Bzip2.xs b/Bzip2.xs
|
||||||
|
index e18fced..0d8d0e9 100644
|
||||||
|
--- a/Bzip2.xs
|
||||||
|
+++ b/Bzip2.xs
|
||||||
|
@@ -179,7 +179,7 @@ char* error_info;
|
||||||
|
|
||||||
|
errstr = error_num * -1 < 0 || error_num * -1 > 9 ? "Unknown" : (char *) bzerrorstrings[ error_num * -1 ];
|
||||||
|
|
||||||
|
- if ( obj!=NULL ) {
|
||||||
|
+ if ( obj != NULL ) {
|
||||||
|
obj->bzip_errno = error_num;
|
||||||
|
obj->io_error = error_num == BZ_IO_ERROR ? errno : 0;
|
||||||
|
}
|
||||||
|
@@ -216,7 +216,7 @@ Bool bzfile_error( bzFile *obj ) {
|
||||||
|
#else
|
||||||
|
Bool bzfile_error( obj ) bzFile *obj; {
|
||||||
|
#endif
|
||||||
|
- return obj!=NULL ? ( obj->bzip_errno ? True : False ) : global_bzip_errno ? True : False;
|
||||||
|
+ return obj != NULL ? ( obj->bzip_errno ? True : False ) : global_bzip_errno ? True : False;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef CAN_PROTOTYPE
|
||||||
|
@@ -224,7 +224,7 @@ int bzfile_geterrno( bzFile *obj ) {
|
||||||
|
#else
|
||||||
|
int bzfile_geterrno( obj ) bzFile *obj; {
|
||||||
|
#endif
|
||||||
|
- return obj==NULL ? global_bzip_errno : obj->bzip_errno;
|
||||||
|
+ return obj == NULL ? global_bzip_errno : obj->bzip_errno;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef CAN_PROTOTYPE
|
||||||
|
@@ -232,7 +232,7 @@ const char *bzfile_geterrstr( bzFile *obj ) {
|
||||||
|
#else
|
||||||
|
const char *bzfile_geterrstr( obj ) bzFile *obj; {
|
||||||
|
#endif
|
||||||
|
- int error_num = obj==NULL ? global_bzip_errno : obj->bzip_errno;
|
||||||
|
+ int error_num = obj == NULL ? global_bzip_errno : obj->bzip_errno;
|
||||||
|
char *errstr = error_num * -1 < 0 || error_num * -1 > 9 ? "Unknown" : (char *) bzerrorstrings[ error_num * -1 ];
|
||||||
|
return errstr;
|
||||||
|
}
|
||||||
|
@@ -242,7 +242,7 @@ Bool bzfile_eof( bzFile *obj ) {
|
||||||
|
#else
|
||||||
|
Bool bzfile_eof( obj ) bzFile *obj; {
|
||||||
|
#endif
|
||||||
|
- return obj==NULL ? False :
|
||||||
|
+ return obj == NULL ? False :
|
||||||
|
obj->bzip_errno == BZ_UNEXPECTED_EOF ? True :
|
||||||
|
obj->bzip_errno == BZ_OK && obj->pending_io_error && obj->io_error == BZ_IO_EOF ? True :
|
||||||
|
obj->bzip_errno != BZ_IO_ERROR ? False :
|
||||||
|
@@ -254,7 +254,7 @@ long bzfile_total_in( bzFile *obj ) {
|
||||||
|
#else
|
||||||
|
long bzfile_total_in( obj ) bzFile *obj; {
|
||||||
|
#endif
|
||||||
|
- return obj->total_in;
|
||||||
|
+ return obj == NULL ? 0 : obj->total_in;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef CAN_PROTOTYPE
|
||||||
|
@@ -262,7 +262,7 @@ long bzfile_total_out( bzFile *obj ) {
|
||||||
|
#else
|
||||||
|
long bzfile_total_out( obj ) bzFile *obj; {
|
||||||
|
#endif
|
||||||
|
- return obj->total_out;
|
||||||
|
+ return obj == NULL ? 0 : obj->total_out;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef CAN_PROTOTYPE
|
||||||
|
@@ -270,8 +270,10 @@ long bzfile_clear_totals( bzFile *obj ) {
|
||||||
|
#else
|
||||||
|
long bzfile_clear_totals( obj ) bzFile *obj; {
|
||||||
|
#endif
|
||||||
|
- obj->total_in = 0;
|
||||||
|
- obj->total_out = 0;
|
||||||
|
+ if (obj) {
|
||||||
|
+ obj->total_in = 0;
|
||||||
|
+ obj->total_out = 0;
|
||||||
|
+ }
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -284,7 +286,8 @@ int bzfile_clearerr( obj ) bzFile *obj; {
|
||||||
|
int clear_flag = 1;
|
||||||
|
|
||||||
|
if ( error_num == BZ_IO_ERROR ) {
|
||||||
|
- PerlIO_clearerr( obj->handle );
|
||||||
|
+ if (obj)
|
||||||
|
+ PerlIO_clearerr( obj->handle );
|
||||||
|
}
|
||||||
|
else if ( error_num == BZ_SEQUENCE_ERROR ) {
|
||||||
|
/* program error */
|
||||||
|
@@ -310,7 +313,7 @@ int bzfile_clearerr( obj ) bzFile *obj; {
|
||||||
|
clear_flag = 0; /* we don't like the version of bzlib */
|
||||||
|
}
|
||||||
|
else if ( error_num == BZ_OK ) {
|
||||||
|
- if ( obj->pending_io_error ) {
|
||||||
|
+ if ( obj && obj->pending_io_error ) {
|
||||||
|
if ( obj->io_error == BZ_IO_EOF ) {
|
||||||
|
PerlIO_clearerr( obj->handle );
|
||||||
|
clear_flag = 0;
|
||||||
|
@@ -335,7 +338,7 @@ int bzfile_clearerr( obj ) bzFile *obj; {
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( clear_flag ) {
|
||||||
|
- if ( obj != NULL ) {
|
||||||
|
+ if ( obj ) {
|
||||||
|
obj->bzip_errno = 0;
|
||||||
|
obj->io_error = 0;
|
||||||
|
obj->pending_io_error = False;
|
||||||
|
@@ -368,6 +371,11 @@ bzFile* bzfile_new( verbosity, small, blockSize100k, workFactor )
|
||||||
|
}
|
||||||
|
|
||||||
|
Newz(idthing, obj, 1, bzFile);
|
||||||
|
+ if (!obj) {
|
||||||
|
+ BZ_SETERR(NULL, BZ_IO_ERROR, NULL);
|
||||||
|
+ die( "Out of memory");
|
||||||
|
+ return NULL;
|
||||||
|
+ }
|
||||||
|
|
||||||
|
BZ_SETERR(obj, BZ_OK, NULL);
|
||||||
|
|
||||||
|
@@ -411,7 +419,7 @@ void bzfile_free( bzFile* obj ) {
|
||||||
|
#else
|
||||||
|
void bzfile_free( obj ) bzFile* obj; {
|
||||||
|
#endif
|
||||||
|
- if ( obj!=NULL ) Safefree((void*) obj);
|
||||||
|
+ if ( obj != NULL ) Safefree((void*) obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* query and/or set param setting of bzFile */
|
||||||
|
@@ -1668,8 +1676,8 @@ MY_new(...)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
- perlobj=NULL;
|
||||||
|
- obj=NULL;
|
||||||
|
+ perlobj = NULL;
|
||||||
|
+ obj = NULL;
|
||||||
|
if ( items == 0 ) {
|
||||||
|
class = "Compress::Bzip2";
|
||||||
|
}
|
||||||
|
@@ -1711,7 +1719,9 @@ DESTROY(obj)
|
||||||
|
|
||||||
|
CODE:
|
||||||
|
{
|
||||||
|
- if (obj->verbosity>=1)
|
||||||
|
+ if (!obj)
|
||||||
|
+ XSRETURN_UNDEF;
|
||||||
|
+ if (obj->verbosity >= 1)
|
||||||
|
PerlIO_printf(PerlIO_stderr(), "debug: DESTROY on %p\n", obj);
|
||||||
|
bzfile_close( obj, 0 );
|
||||||
|
bzfile_free( obj );
|
||||||
|
@@ -2135,7 +2145,7 @@ MY_bzclearerr(obj)
|
||||||
|
|
||||||
|
CODE:
|
||||||
|
{
|
||||||
|
- if ( bzfile_clearerr( obj ) )
|
||||||
|
+ if ( obj && bzfile_clearerr( obj ) )
|
||||||
|
RETVAL = 1;
|
||||||
|
else
|
||||||
|
RETVAL = 0;
|
||||||
@ -1,10 +1,13 @@
|
|||||||
Name: perl-Compress-Bzip2
|
Name: perl-Compress-Bzip2
|
||||||
Version: 2.26
|
Version: 2.26
|
||||||
Release: 11
|
Release: 12
|
||||||
Summary: This module provides a Compress::Zlib like Perl interface to the bzip2 library
|
Summary: This module provides a Compress::Zlib like Perl interface to the bzip2 library
|
||||||
License: GPL+ or Artistic
|
License: GPL+ or Artistic
|
||||||
URL: https://metacpan.org/release/Compress-Bzip2
|
URL: https://metacpan.org/release/Compress-Bzip2
|
||||||
Source0: https://cpan.metacpan.org/authors/id/R/RU/RURBAN/Compress-Bzip2-%{version}.tar.gz
|
Source0: https://cpan.metacpan.org/authors/id/R/RU/RURBAN/Compress-Bzip2-%{version}.tar.gz
|
||||||
|
|
||||||
|
Patch1: backport-Fix-various-obj-NULL-derefs.patch
|
||||||
|
|
||||||
BuildRequires: findutils gcc make bzip2-devel >= 1.0.5 sed perl(ExtUtils::MakeMaker)
|
BuildRequires: findutils gcc make bzip2-devel >= 1.0.5 sed perl(ExtUtils::MakeMaker)
|
||||||
BuildRequires: perl-interpreter perl-generators perl(Test::More) perl-devel
|
BuildRequires: perl-interpreter perl-generators perl(Test::More) perl-devel
|
||||||
Requires: perl(:MODULE_COMPAT_%(eval "`perl -V:version`"; echo $version)) perl(constant) >= 1.04
|
Requires: perl(:MODULE_COMPAT_%(eval "`perl -V:version`"; echo $version)) perl(constant) >= 1.04
|
||||||
@ -20,6 +23,7 @@ level routines.
|
|||||||
|
|
||||||
%prep
|
%prep
|
||||||
%setup -q -n Compress-Bzip2-%{version}
|
%setup -q -n Compress-Bzip2-%{version}
|
||||||
|
%patch1 -p1
|
||||||
|
|
||||||
find bzlib-src -mindepth 1 -type f \! -name 'sample*' -delete
|
find bzlib-src -mindepth 1 -type f \! -name 'sample*' -delete
|
||||||
sed -i -e '/^bzlib-src\//d' MANIFEST
|
sed -i -e '/^bzlib-src\//d' MANIFEST
|
||||||
@ -47,6 +51,9 @@ make test
|
|||||||
%{_mandir}/man3/*.3pm*
|
%{_mandir}/man3/*.3pm*
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Tue Oct 24 2023 wangjiang <wangjiang37@h-partners.com> - 2.26-12
|
||||||
|
- fix various obj NULL derefs
|
||||||
|
|
||||||
* Wed May 13 2020 openEuler Buildteam <buildteam@openeuler.org> - 2.26-11
|
* Wed May 13 2020 openEuler Buildteam <buildteam@openeuler.org> - 2.26-11
|
||||||
- Add build requires of perl-devel
|
- Add build requires of perl-devel
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user