Skip to content
Projeler
Gruplar
Parçacıklar
Yardım
Yükleniyor...
Oturum aç / Kaydol
Gezinmeyi değiştir
C
cpython
Proje
Proje
Ayrıntılar
Etkinlik
Cycle Analytics
Depo (repository)
Depo (repository)
Dosyalar
Kayıtlar (commit)
Dallar (branch)
Etiketler
Katkıda bulunanlar
Grafik
Karşılaştır
Grafikler
Konular (issue)
0
Konular (issue)
0
Liste
Pano
Etiketler
Kilometre Taşları
Birleştirme (merge) Talepleri
0
Birleştirme (merge) Talepleri
0
CI / CD
CI / CD
İş akışları (pipeline)
İşler
Zamanlamalar
Grafikler
Paketler
Paketler
Wiki
Wiki
Parçacıklar
Parçacıklar
Üyeler
Üyeler
Collapse sidebar
Close sidebar
Etkinlik
Grafik
Grafikler
Yeni bir konu (issue) oluştur
İşler
Kayıtlar (commit)
Konu (issue) Panoları
Kenar çubuğunu aç
Batuhan Osman TASKAYA
cpython
Commits
522a6c66
Kaydet (Commit)
522a6c66
authored
17 years ago
tarafından
Guido van Rossum
Dosyalara gözat
Seçenekler
Dosyalara Gözat
İndir
Eposta Yamaları
Sade Fark
bz2 uses bytes everywhere (even for the 'newlines' attribute).
test_bz2 passes.
üst
776152b6
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
118 additions
and
82 deletions
+118
-82
test_bz2.py
Lib/test/test_bz2.py
+16
-16
bz2module.c
Modules/bz2module.c
+102
-66
No files found.
Lib/test/test_bz2.py
Dosyayı görüntüle @
522a6c66
...
...
@@ -15,9 +15,9 @@ has_cmdline_bunzip2 = sys.platform not in ("win32", "os2emx", "riscos")
class
BaseTest
(
unittest
.
TestCase
):
"Base for other testcases."
TEXT
=
'root:x:0:0:root:/root:/bin/bash
\n
bin:x:1:1:bin:/bin:
\n
daemon:x:2:2:daemon:/sbin:
\n
adm:x:3:4:adm:/var/adm:
\n
lp:x:4:7:lp:/var/spool/lpd:
\n
sync:x:5:0:sync:/sbin:/bin/sync
\n
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
\n
halt:x:7:0:halt:/sbin:/sbin/halt
\n
mail:x:8:12:mail:/var/spool/mail:
\n
news:x:9:13:news:/var/spool/news:
\n
uucp:x:10:14:uucp:/var/spool/uucp:
\n
operator:x:11:0:operator:/root:
\n
games:x:12:100:games:/usr/games:
\n
gopher:x:13:30:gopher:/usr/lib/gopher-data:
\n
ftp:x:14:50:FTP User:/var/ftp:/bin/bash
\n
nobody:x:65534:65534:Nobody:/home:
\n
postfix:x:100:101:postfix:/var/spool/postfix:
\n
niemeyer:x:500:500::/home/niemeyer:/bin/bash
\n
postgres:x:101:102:PostgreSQL Server:/var/lib/pgsql:/bin/bash
\n
mysql:x:102:103:MySQL server:/var/lib/mysql:/bin/bash
\n
www:x:103:104::/var/www:/bin/false
\n
'
DATA
=
'BZh91AY&SY.
\xc8
N
\x18\x00\x01
>_
\x80\x00\x10
@
\x02\xff\xf0\x01\x07
n
\x00
?
\xe7\xff\xe0
0
\x01\x99\xaa\x00\xc0\x03
F
\x86\x8c
#&
\x83
F
\x9a\x03\x06\xa6\xd0\xa6\x93
M
\x0f
Q
\xa7\xa8\x06\x80
4hh
\x12
$
\x11\xa4
i4
\xf1
4S
\xd2
<Q
\xb5\x0f
H
\xd3\xd4\xdd\xd5\x87\xbb\xf8\x94\r\x8f\xaf
I
\x12\xe1\xc9\xf8
/E
\x00
pu
\x89\x12
]
\xc9\xbb
DL
\n
Q
\x0e\t
1
\x12\xdf\xa0\xc0\x97\xac
2O9
\x89\x13\x94\x0e\x1c
7
\x0e
d
\x95
I
\x0c\xaa
J
\xa4\x18
L
\x10\x05
#
\x9c\xaf\xba\xbc
/
\x97\x8a
#C
\xc8\xe1\x8c
W
\xf9\xe2\xd0\xd6
M
\xa7\x8b
Xa<e
\x84
t
\xcb
L
\xb3\xa7\xd9\xcd\xd1\xcb\x84
.
\xaf\xb3\xab\xab\xad
`n}
\xa0
lh
\t
E,
\x8e
Z
\x15\x17
VH>
\x88\xe5\xcd
9gd6
\x0b\n\xe9\x9b\xd5\x8a\x99\xf7\x08
.K
\x8e
v
\xfb\xf7
xw
\xbb\xdf\xa1\x92\xf1\xdd
|/";
\xa2\xba\x9f\xd5\xb1
#A
\xb6\xf6\xb3
o
\xc9\xc5
y
\\\xeb
O
\xe7\x85\x9a\xbc\xb6
f8
\x95
2
\xd5\xd7
"
%
\x89
>V,
\xf7\xa6
z
\xe2\x9f\xa3\xdf\x11\x11
"
\xd6
E)I
\xa9\x13
^
\xca\xf3
r
\xd0\x03
U
\x92
2
\xf2
6
\xec\xb6\xed\x8b\xc3
U
\x13\x9d\xc5\x17
0
\xa4\xfa
^
\x92\xac
DF
\x8a\x97\xd6\x19\xfe\xdd\xb8\xbd\x1a\x9a\x19\xa3\x80
ankR
\x8b\xe5\xd8
3]
\xa9\xc6\x08\x82
f
\xf6\xb9
"6l$
\xb8
j@
\xc0\x8a\xb0
l1..
\xba
k
\x83
ls
\x15\xbc\xf4\xc1\x13\xbe\xf8
E
\xb8\x9d\r\xa8\x9d
k
\x84\xd3
n
\xfa\xac
Q
\x07\xb1
%
y
\xaa
v
\xb4\x08\xe0
z
\x1b\x16\xf5\x04\xe9\xcc\xb9\x08
z
\x1e
n7.G
\xfc
]
\xc9\x14\xe1
B@
\xbb
!8`'
DATA_CRLF
=
'BZh91AY&SY
\xae
z
\xbb
N
\x00\x01
H
\xdf\x80\x00\x12
@
\x02\xff\xf0\x01\x07
n
\x00
?
\xe7\xff\xe0
@
\x01\xbc\xc6
`
\x86
*
\x8d
=M
\xa9\x9a\x86\xd0
L@
\x0f
I
\xa6
!
\xa1\x13\xc8\x88
jdi
\x8d
@
\x03
@
\x1a\x1a\x0c\x0c\x83
\x00\xc4
h2
\x19\x01\x82
D
\x84
e
\t\xe8\x99\x89\x19\x1a
h
\x00\r\x1a\x11\xaf\x9b\x0f
G
\xf5
(
\x1b\x1f
?
\t\x12\xcf\xb5\xfc\x95
E
\x00
ps
\x89\x12
^
\xa4\xdd\xa2
&
\x05
(
\x87\x04\x98\x89
u
\xe4
0
%
\xb6\x19\'\x8c\xc4\x89\xca\x07\x0e\x1b
!
\x91
UIFU
%
C
\x99
4!DI
\xd2\xfa\xf0\xf1
N8W
\xde\x13
A
\xf5\x9c
r
%
?
\x9f
3;I45A
\xd1\x8b
T
\xb1
<l
\xba\xcb
_
\xc0
0xY
\x17
r
\x17\x88\x08\x08
@
\xa0\r
y@
\x10\x04
$)`
\xf2\xce\x89
z
\xb0
s
\xec\x9b
.iW
\x9d\x81\xb5
-+t
\x9f\x1a\'\x97
dB
\xf5
x
\xb5\xbe
.[.
\xd7\x0e\x81\xe7\x08\x1c
N`
\x88\x10\xca\x87\xc3
!"
\x80\x92
R
\xa1
/
\xd1\xc0\xe6
mf
\xac\xbd\x99\xcc
a
\xb3\x87
80>
\xa4\xc7\x8d\x1a\\
"
\xad\xa1\xab
yBg
\x15\xb9
l
\x88\x88\x91
k"
\x94\xa4\xd4\x89\xae
*
\xa6\x0b\x10\x0c\xd6\xd4
m
\xe8
6
\xec\xb5
j
\x8a\x86
j
\'
;
\xca
.
\x01
I
\xf2\xaa
J
\xe8\x88\x8c
U+t3
\xfb\x0c\n\xa3
3
\x13
r2
\r\x16\xe0\xb3
(
\xbf\x1d\x83
r
\xe7
M
\xf0
D
\x13
65
\xd8\x88\xd3\xa4\x92\xcb
2
\x06\x04\\\xc1\xb0\xea
//
\xbe
k&
\xd8\xe6
+t
\xe5\xa1\x13\xad
a
\x16\xde
r5"w]
\xa2
i
\xb7
[
\x97
R
\xe2
IT
\xcd
;Z
\x04
dk4
\xad\x8a\t\xd3\x81
z
\x10\xf1
:^`
\xab\x1f\xc5\xdc\x91
N
\x14
$+
\x9e\xae\xd3\x80
'
TEXT
=
b
'root:x:0:0:root:/root:/bin/bash
\n
bin:x:1:1:bin:/bin:
\n
daemon:x:2:2:daemon:/sbin:
\n
adm:x:3:4:adm:/var/adm:
\n
lp:x:4:7:lp:/var/spool/lpd:
\n
sync:x:5:0:sync:/sbin:/bin/sync
\n
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
\n
halt:x:7:0:halt:/sbin:/sbin/halt
\n
mail:x:8:12:mail:/var/spool/mail:
\n
news:x:9:13:news:/var/spool/news:
\n
uucp:x:10:14:uucp:/var/spool/uucp:
\n
operator:x:11:0:operator:/root:
\n
games:x:12:100:games:/usr/games:
\n
gopher:x:13:30:gopher:/usr/lib/gopher-data:
\n
ftp:x:14:50:FTP User:/var/ftp:/bin/bash
\n
nobody:x:65534:65534:Nobody:/home:
\n
postfix:x:100:101:postfix:/var/spool/postfix:
\n
niemeyer:x:500:500::/home/niemeyer:/bin/bash
\n
postgres:x:101:102:PostgreSQL Server:/var/lib/pgsql:/bin/bash
\n
mysql:x:102:103:MySQL server:/var/lib/mysql:/bin/bash
\n
www:x:103:104::/var/www:/bin/false
\n
'
DATA
=
b
'BZh91AY&SY.
\xc8
N
\x18\x00\x01
>_
\x80\x00\x10
@
\x02\xff\xf0\x01\x07
n
\x00
?
\xe7\xff\xe0
0
\x01\x99\xaa\x00\xc0\x03
F
\x86\x8c
#&
\x83
F
\x9a\x03\x06\xa6\xd0\xa6\x93
M
\x0f
Q
\xa7\xa8\x06\x80
4hh
\x12
$
\x11\xa4
i4
\xf1
4S
\xd2
<Q
\xb5\x0f
H
\xd3\xd4\xdd\xd5\x87\xbb\xf8\x94\r\x8f\xaf
I
\x12\xe1\xc9\xf8
/E
\x00
pu
\x89\x12
]
\xc9\xbb
DL
\n
Q
\x0e\t
1
\x12\xdf\xa0\xc0\x97\xac
2O9
\x89\x13\x94\x0e\x1c
7
\x0e
d
\x95
I
\x0c\xaa
J
\xa4\x18
L
\x10\x05
#
\x9c\xaf\xba\xbc
/
\x97\x8a
#C
\xc8\xe1\x8c
W
\xf9\xe2\xd0\xd6
M
\xa7\x8b
Xa<e
\x84
t
\xcb
L
\xb3\xa7\xd9\xcd\xd1\xcb\x84
.
\xaf\xb3\xab\xab\xad
`n}
\xa0
lh
\t
E,
\x8e
Z
\x15\x17
VH>
\x88\xe5\xcd
9gd6
\x0b\n\xe9\x9b\xd5\x8a\x99\xf7\x08
.K
\x8e
v
\xfb\xf7
xw
\xbb\xdf\xa1\x92\xf1\xdd
|/";
\xa2\xba\x9f\xd5\xb1
#A
\xb6\xf6\xb3
o
\xc9\xc5
y
\\\xeb
O
\xe7\x85\x9a\xbc\xb6
f8
\x95
2
\xd5\xd7
"
%
\x89
>V,
\xf7\xa6
z
\xe2\x9f\xa3\xdf\x11\x11
"
\xd6
E)I
\xa9\x13
^
\xca\xf3
r
\xd0\x03
U
\x92
2
\xf2
6
\xec\xb6\xed\x8b\xc3
U
\x13\x9d\xc5\x17
0
\xa4\xfa
^
\x92\xac
DF
\x8a\x97\xd6\x19\xfe\xdd\xb8\xbd\x1a\x9a\x19\xa3\x80
ankR
\x8b\xe5\xd8
3]
\xa9\xc6\x08\x82
f
\xf6\xb9
"6l$
\xb8
j@
\xc0\x8a\xb0
l1..
\xba
k
\x83
ls
\x15\xbc\xf4\xc1\x13\xbe\xf8
E
\xb8\x9d\r\xa8\x9d
k
\x84\xd3
n
\xfa\xac
Q
\x07\xb1
%
y
\xaa
v
\xb4\x08\xe0
z
\x1b\x16\xf5\x04\xe9\xcc\xb9\x08
z
\x1e
n7.G
\xfc
]
\xc9\x14\xe1
B@
\xbb
!8`'
DATA_CRLF
=
b
'BZh91AY&SY
\xae
z
\xbb
N
\x00\x01
H
\xdf\x80\x00\x12
@
\x02\xff\xf0\x01\x07
n
\x00
?
\xe7\xff\xe0
@
\x01\xbc\xc6
`
\x86
*
\x8d
=M
\xa9\x9a\x86\xd0
L@
\x0f
I
\xa6
!
\xa1\x13\xc8\x88
jdi
\x8d
@
\x03
@
\x1a\x1a\x0c\x0c\x83
\x00\xc4
h2
\x19\x01\x82
D
\x84
e
\t\xe8\x99\x89\x19\x1a
h
\x00\r\x1a\x11\xaf\x9b\x0f
G
\xf5
(
\x1b\x1f
?
\t\x12\xcf\xb5\xfc\x95
E
\x00
ps
\x89\x12
^
\xa4\xdd\xa2
&
\x05
(
\x87\x04\x98\x89
u
\xe4
0
%
\xb6\x19\'\x8c\xc4\x89\xca\x07\x0e\x1b
!
\x91
UIFU
%
C
\x99
4!DI
\xd2\xfa\xf0\xf1
N8W
\xde\x13
A
\xf5\x9c
r
%
?
\x9f
3;I45A
\xd1\x8b
T
\xb1
<l
\xba\xcb
_
\xc0
0xY
\x17
r
\x17\x88\x08\x08
@
\xa0\r
y@
\x10\x04
$)`
\xf2\xce\x89
z
\xb0
s
\xec\x9b
.iW
\x9d\x81\xb5
-+t
\x9f\x1a\'\x97
dB
\xf5
x
\xb5\xbe
.[.
\xd7\x0e\x81\xe7\x08\x1c
N`
\x88\x10\xca\x87\xc3
!"
\x80\x92
R
\xa1
/
\xd1\xc0\xe6
mf
\xac\xbd\x99\xcc
a
\xb3\x87
80>
\xa4\xc7\x8d\x1a\\
"
\xad\xa1\xab
yBg
\x15\xb9
l
\x88\x88\x91
k"
\x94\xa4\xd4\x89\xae
*
\xa6\x0b\x10\x0c\xd6\xd4
m
\xe8
6
\xec\xb5
j
\x8a\x86
j
\'
;
\xca
.
\x01
I
\xf2\xaa
J
\xe8\x88\x8c
U+t3
\xfb\x0c\n\xa3
3
\x13
r2
\r\x16\xe0\xb3
(
\xbf\x1d\x83
r
\xe7
M
\xf0
D
\x13
65
\xd8\x88\xd3\xa4\x92\xcb
2
\x06\x04\\\xc1\xb0\xea
//
\xbe
k&
\xd8\xe6
+t
\xe5\xa1\x13\xad
a
\x16\xde
r5"w]
\xa2
i
\xb7
[
\x97
R
\xe2
IT
\xcd
;Z
\x04
dk4
\xad\x8a\t\xd3\x81
z
\x10\xf1
:^`
\xab\x1f\xc5\xdc\x91
N
\x14
$+
\x9e\xae\xd3\x80
'
if
has_cmdline_bunzip2
:
def
decompress
(
self
,
data
):
...
...
@@ -69,7 +69,7 @@ class BZ2FileTest(BaseTest):
# "Test BZ2File.read() in chunks of 10 bytes"
self
.
createTempFile
()
bz2f
=
BZ2File
(
self
.
filename
)
text
=
''
text
=
b
''
while
1
:
str
=
bz2f
.
read
(
10
)
if
not
str
:
...
...
@@ -117,7 +117,7 @@ class BZ2FileTest(BaseTest):
self
.
createTempFile
()
bz2f
=
BZ2File
(
self
.
filename
,
"rU"
)
self
.
assertEqual
(
bz2f
.
read
(),
self
.
TEXT
)
self
.
assertEqual
(
bz2f
.
newlines
,
"
\n
"
)
self
.
assertEqual
(
bz2f
.
newlines
,
b
"
\n
"
)
bz2f
.
close
()
def
testUniversalNewlinesCRLF
(
self
):
...
...
@@ -125,7 +125,7 @@ class BZ2FileTest(BaseTest):
self
.
createTempFile
(
crlf
=
1
)
bz2f
=
BZ2File
(
self
.
filename
,
"rU"
)
self
.
assertEqual
(
bz2f
.
read
(),
self
.
TEXT
)
self
.
assertEqual
(
bz2f
.
newlines
,
"
\r\n
"
)
self
.
assertEqual
(
bz2f
.
newlines
,
b
"
\r\n
"
)
bz2f
.
close
()
def
testWrite
(
self
):
...
...
@@ -207,7 +207,7 @@ class BZ2FileTest(BaseTest):
bz2f
=
BZ2File
(
self
.
filename
)
bz2f
.
seek
(
150000
)
self
.
assertEqual
(
bz2f
.
tell
(),
len
(
self
.
TEXT
))
self
.
assertEqual
(
bz2f
.
read
(),
""
)
self
.
assertEqual
(
bz2f
.
read
(),
b
""
)
bz2f
.
close
()
def
testSeekPostEndTwice
(
self
):
...
...
@@ -217,7 +217,7 @@ class BZ2FileTest(BaseTest):
bz2f
.
seek
(
150000
)
bz2f
.
seek
(
150000
)
self
.
assertEqual
(
bz2f
.
tell
(),
len
(
self
.
TEXT
))
self
.
assertEqual
(
bz2f
.
read
(),
""
)
self
.
assertEqual
(
bz2f
.
read
(),
b
""
)
bz2f
.
close
()
def
testSeekPreStart
(
self
):
...
...
@@ -252,18 +252,18 @@ class BZ2FileTest(BaseTest):
def
testBug1191043
(
self
):
# readlines() for files containing no newline
data
=
'BZh91AY&SY
\xd9
b
\x89
]
\x00\x00\x00\x03\x80\x04\x00\x02\x00\x0c\x00
\x00
!
\x9a
h3M
\x13
<]
\xc9\x14\xe1
BCe
\x8a
%
t'
data
=
b
'BZh91AY&SY
\xd9
b
\x89
]
\x00\x00\x00\x03\x80\x04\x00\x02\x00\x0c\x00
\x00
!
\x9a
h3M
\x13
<]
\xc9\x14\xe1
BCe
\x8a
%
t'
f
=
open
(
self
.
filename
,
"wb"
)
f
.
write
(
data
)
f
.
close
()
bz2f
=
BZ2File
(
self
.
filename
)
lines
=
bz2f
.
readlines
()
bz2f
.
close
()
self
.
assertEqual
(
lines
,
[
'Test'
])
self
.
assertEqual
(
lines
,
[
b
'Test'
])
bz2f
=
BZ2File
(
self
.
filename
)
xlines
=
list
(
bz2f
.
readlines
())
bz2f
.
close
()
self
.
assertEqual
(
xlines
,
[
'Test'
])
self
.
assertEqual
(
xlines
,
[
b
'Test'
])
class
BZ2CompressorTest
(
BaseTest
):
...
...
@@ -279,7 +279,7 @@ class BZ2CompressorTest(BaseTest):
# "Test BZ2Compressor.compress()/flush() with chunks of 10 bytes"
bz2c
=
BZ2Compressor
()
n
=
0
data
=
''
data
=
b
''
while
1
:
str
=
self
.
TEXT
[
n
*
10
:(
n
+
1
)
*
10
]
if
not
str
:
...
...
@@ -303,7 +303,7 @@ class BZ2DecompressorTest(BaseTest):
def
testDecompressChunks10
(
self
):
# "Test BZ2Decompressor.decompress() with chunks of 10 bytes"
bz2d
=
BZ2Decompressor
()
text
=
''
text
=
b
''
n
=
0
while
1
:
str
=
self
.
DATA
[
n
*
10
:(
n
+
1
)
*
10
]
...
...
@@ -316,7 +316,7 @@ class BZ2DecompressorTest(BaseTest):
def
testDecompressUnusedData
(
self
):
# "Test BZ2Decompressor.decompress() with unused data"
bz2d
=
BZ2Decompressor
()
unused_data
=
"this is unused data"
unused_data
=
b
"this is unused data"
text
=
bz2d
.
decompress
(
self
.
DATA
+
unused_data
)
self
.
assertEqual
(
text
,
self
.
TEXT
)
self
.
assertEqual
(
bz2d
.
unused_data
,
unused_data
)
...
...
@@ -343,8 +343,8 @@ class FuncTest(BaseTest):
def
testDecompressEmpty
(
self
):
# "Test decompress() function with empty string"
text
=
bz2
.
decompress
(
""
)
self
.
assertEqual
(
text
,
""
)
text
=
bz2
.
decompress
(
b
""
)
self
.
assertEqual
(
text
,
b
""
)
def
testDecompressIncomplete
(
self
):
# "Test decompress() function with incomplete data"
...
...
This diff is collapsed.
Click to expand it.
Modules/bz2module.c
Dosyayı görüntüle @
522a6c66
...
...
@@ -34,7 +34,7 @@ typedef fpos_t Py_off_t;
#error "Large file support, but neither off_t nor fpos_t is large enough."
#endif
#define BUF(v) Py
String_AS_STRING((PyStringObject *)
v)
#define BUF(v) Py
Bytes_AS_STRING(
v)
#define MODE_CLOSED 0
#define MODE_READ 1
...
...
@@ -238,7 +238,7 @@ Util_GetLine(BZ2FileObject *f, int n)
int
univ_newline
=
f
->
f_univ_newline
;
total_v_size
=
n
>
0
?
n
:
100
;
v
=
Py
String
_FromStringAndSize
((
char
*
)
NULL
,
total_v_size
);
v
=
Py
Bytes
_FromStringAndSize
((
char
*
)
NULL
,
total_v_size
);
if
(
v
==
NULL
)
return
NULL
;
...
...
@@ -311,15 +311,21 @@ Util_GetLine(BZ2FileObject *f, int n)
Py_DECREF
(
v
);
return
NULL
;
}
if
(
_PyString_Resize
(
&
v
,
total_v_size
)
<
0
)
if
(
PyBytes_Resize
(
v
,
total_v_size
)
<
0
)
{
Py_DECREF
(
v
);
return
NULL
;
}
buf
=
BUF
(
v
)
+
used_v_size
;
end
=
BUF
(
v
)
+
total_v_size
;
}
used_v_size
=
buf
-
BUF
(
v
);
if
(
used_v_size
!=
total_v_size
)
_PyString_Resize
(
&
v
,
used_v_size
);
if
(
used_v_size
!=
total_v_size
)
{
if
(
PyBytes_Resize
(
v
,
used_v_size
)
<
0
)
{
Py_DECREF
(
v
);
v
=
NULL
;
}
}
return
v
;
}
...
...
@@ -442,10 +448,10 @@ Util_ReadAhead(BZ2FileObject *f, int bufsize)
/* This is a hacked version of Python's
* fileobject.c:readahead_get_line_skip(). */
static
Py
String
Object
*
static
Py
Bytes
Object
*
Util_ReadAheadGetLineSkip
(
BZ2FileObject
*
f
,
int
skip
,
int
bufsize
)
{
Py
String
Object
*
s
;
Py
Bytes
Object
*
s
;
char
*
bufptr
;
char
*
buf
;
int
len
;
...
...
@@ -456,17 +462,17 @@ Util_ReadAheadGetLineSkip(BZ2FileObject *f, int skip, int bufsize)
len
=
f
->
f_bufend
-
f
->
f_bufptr
;
if
(
len
==
0
)
return
(
Py
String
Object
*
)
Py
String
_FromStringAndSize
(
NULL
,
skip
);
return
(
Py
Bytes
Object
*
)
Py
Bytes
_FromStringAndSize
(
NULL
,
skip
);
bufptr
=
memchr
(
f
->
f_bufptr
,
'\n'
,
len
);
if
(
bufptr
!=
NULL
)
{
bufptr
++
;
/* Count the '\n' */
len
=
bufptr
-
f
->
f_bufptr
;
s
=
(
Py
String
Object
*
)
Py
String
_FromStringAndSize
(
NULL
,
skip
+
len
);
s
=
(
Py
Bytes
Object
*
)
Py
Bytes
_FromStringAndSize
(
NULL
,
skip
+
len
);
if
(
s
==
NULL
)
return
NULL
;
memcpy
(
Py
String
_AS_STRING
(
s
)
+
skip
,
f
->
f_bufptr
,
len
);
memcpy
(
Py
Bytes
_AS_STRING
(
s
)
+
skip
,
f
->
f_bufptr
,
len
);
f
->
f_bufptr
=
bufptr
;
if
(
bufptr
==
f
->
f_bufend
)
Util_DropReadAhead
(
f
);
...
...
@@ -480,7 +486,7 @@ Util_ReadAheadGetLineSkip(BZ2FileObject *f, int skip, int bufsize)
PyMem_Free
(
buf
);
return
NULL
;
}
memcpy
(
Py
String
_AS_STRING
(
s
)
+
skip
,
bufptr
,
len
);
memcpy
(
Py
Bytes
_AS_STRING
(
s
)
+
skip
,
bufptr
,
len
);
PyMem_Free
(
buf
);
}
return
s
;
...
...
@@ -513,7 +519,7 @@ BZ2File_read(BZ2FileObject *self, PyObject *args)
case
MODE_READ
:
break
;
case
MODE_READ_EOF
:
ret
=
Py
String_FromString
(
""
);
ret
=
Py
Bytes_FromStringAndSize
(
""
,
0
);
goto
cleanup
;
case
MODE_CLOSED
:
PyErr_SetString
(
PyExc_ValueError
,
...
...
@@ -535,7 +541,7 @@ BZ2File_read(BZ2FileObject *self, PyObject *args)
"more than a Python string can hold"
);
goto
cleanup
;
}
ret
=
Py
String
_FromStringAndSize
((
char
*
)
NULL
,
buffersize
);
ret
=
Py
Bytes
_FromStringAndSize
((
char
*
)
NULL
,
buffersize
);
if
(
ret
==
NULL
)
goto
cleanup
;
bytesread
=
0
;
...
...
@@ -561,14 +567,21 @@ BZ2File_read(BZ2FileObject *self, PyObject *args)
}
if
(
bytesrequested
<
0
)
{
buffersize
=
Util_NewBufferSize
(
buffersize
);
if
(
_PyString_Resize
(
&
ret
,
buffersize
)
<
0
)
if
(
PyBytes_Resize
(
ret
,
buffersize
)
<
0
)
{
Py_DECREF
(
ret
);
ret
=
NULL
;
goto
cleanup
;
}
}
else
{
break
;
}
}
if
(
bytesread
!=
buffersize
)
_PyString_Resize
(
&
ret
,
bytesread
);
if
(
bytesread
!=
buffersize
)
{
if
(
PyBytes_Resize
(
ret
,
bytesread
)
<
0
)
{
Py_DECREF
(
ret
);
ret
=
NULL
;
}
}
cleanup:
RELEASE_LOCK
(
self
);
...
...
@@ -598,7 +611,7 @@ BZ2File_readline(BZ2FileObject *self, PyObject *args)
case
MODE_READ
:
break
;
case
MODE_READ_EOF
:
ret
=
Py
String_FromString
(
""
);
ret
=
Py
Bytes_FromStringAndSize
(
""
,
0
);
goto
cleanup
;
case
MODE_CLOSED
:
PyErr_SetString
(
PyExc_ValueError
,
...
...
@@ -611,7 +624,7 @@ BZ2File_readline(BZ2FileObject *self, PyObject *args)
}
if
(
sizehint
==
0
)
ret
=
Py
String_FromString
(
""
);
ret
=
Py
Bytes_FromStringAndSize
(
""
,
0
);
else
ret
=
Util_GetLine
(
self
,
(
sizehint
<
0
)
?
0
:
sizehint
);
...
...
@@ -705,26 +718,30 @@ BZ2File_readlines(BZ2FileObject *self, PyObject *args)
}
if
(
big_buffer
==
NULL
)
{
/* Create the big buffer */
big_buffer
=
Py
String
_FromStringAndSize
(
big_buffer
=
Py
Bytes
_FromStringAndSize
(
NULL
,
buffersize
);
if
(
big_buffer
==
NULL
)
goto
error
;
buffer
=
Py
String
_AS_STRING
(
big_buffer
);
buffer
=
Py
Bytes
_AS_STRING
(
big_buffer
);
memcpy
(
buffer
,
small_buffer
,
nfilled
);
}
else
{
/* Grow the big buffer */
_PyString_Resize
(
&
big_buffer
,
buffersize
);
buffer
=
PyString_AS_STRING
(
big_buffer
);
if
(
PyBytes_Resize
(
big_buffer
,
buffersize
)
<
0
){
Py_DECREF
(
big_buffer
);
big_buffer
=
NULL
;
goto
error
;
}
buffer
=
PyBytes_AS_STRING
(
big_buffer
);
}
continue
;
continue
;
}
end
=
buffer
+
nfilled
+
nread
;
q
=
buffer
;
while
(
p
!=
NULL
)
{
/* Process complete lines */
p
++
;
line
=
Py
String
_FromStringAndSize
(
q
,
p
-
q
);
line
=
Py
Bytes
_FromStringAndSize
(
q
,
p
-
q
);
if
(
line
==
NULL
)
goto
error
;
err
=
PyList_Append
(
list
,
line
);
...
...
@@ -747,18 +764,21 @@ BZ2File_readlines(BZ2FileObject *self, PyObject *args)
}
if
(
nfilled
!=
0
)
{
/* Partial last line */
line
=
Py
String
_FromStringAndSize
(
buffer
,
nfilled
);
line
=
Py
Bytes
_FromStringAndSize
(
buffer
,
nfilled
);
if
(
line
==
NULL
)
goto
error
;
if
(
sizehint
>
0
)
{
/* Need to complete the last line */
PyObject
*
rest
=
Util_GetLine
(
self
,
0
);
PyObject
*
new
;
if
(
rest
==
NULL
)
{
Py_DECREF
(
line
);
goto
error
;
}
PyString_Concat
(
&
line
,
rest
);
new
=
PyBytes_Concat
(
line
,
rest
);
Py_DECREF
(
line
);
Py_DECREF
(
rest
);
line
=
new
;
if
(
line
==
NULL
)
goto
error
;
}
...
...
@@ -903,14 +923,14 @@ BZ2File_writelines(BZ2FileObject *self, PyObject *seq)
if
(
j
==
0
)
break
;
/* Check that all entries are indeed strings. If not,
/* Check that all entries are indeed
byte
strings. If not,
apply the same rules as for file.write() and
convert the rets to strings. This is slow, but
seems to be the only way since all conversion APIs
could potentially execute Python code. */
for
(
i
=
0
;
i
<
j
;
i
++
)
{
PyObject
*
v
=
PyList_GET_ITEM
(
list
,
i
);
if
(
!
Py
String
_Check
(
v
))
{
if
(
!
Py
Bytes
_Check
(
v
))
{
const
char
*
buffer
;
Py_ssize_t
len
;
if
(
PyObject_AsCharBuffer
(
v
,
&
buffer
,
&
len
))
{
...
...
@@ -918,10 +938,10 @@ BZ2File_writelines(BZ2FileObject *self, PyObject *seq)
"writelines() "
"argument must be "
"a sequence of "
"
string
s"
);
"
bytes object
s"
);
goto
error
;
}
line
=
Py
String
_FromStringAndSize
(
buffer
,
line
=
Py
Bytes
_FromStringAndSize
(
buffer
,
len
);
if
(
line
==
NULL
)
goto
error
;
...
...
@@ -935,9 +955,9 @@ BZ2File_writelines(BZ2FileObject *self, PyObject *seq)
Py_BEGIN_ALLOW_THREADS
for
(
i
=
0
;
i
<
j
;
i
++
)
{
line
=
PyList_GET_ITEM
(
list
,
i
);
len
=
Py
String
_GET_SIZE
(
line
);
len
=
Py
Bytes
_GET_SIZE
(
line
);
BZ2_bzWrite
(
&
bzerror
,
self
->
fp
,
Py
String
_AS_STRING
(
line
),
len
);
Py
Bytes
_AS_STRING
(
line
),
len
);
if
(
bzerror
!=
BZ_OK
)
{
Py_BLOCK_THREADS
Util_CatchBZ2Error
(
bzerror
);
...
...
@@ -1047,7 +1067,7 @@ BZ2File_seek(BZ2FileObject *self, PyObject *args)
offset
=
self
->
pos
+
offset
;
}
/* Before getting here, offset must be the absolute position the file
/* Before getting here, offset must be the absolute position the file
* pointer should be set to. */
if
(
offset
>=
self
->
pos
)
{
...
...
@@ -1206,13 +1226,13 @@ BZ2File_get_newlines(BZ2FileObject *self, void *closure)
Py_INCREF
(
Py_None
);
return
Py_None
;
case
NEWLINE_CR
:
return
Py
String_FromString
(
"
\r
"
);
return
Py
Bytes_FromStringAndSize
(
"
\r
"
,
1
);
case
NEWLINE_LF
:
return
Py
String_FromString
(
"
\n
"
);
return
Py
Bytes_FromStringAndSize
(
"
\n
"
,
1
);
case
NEWLINE_CR
|
NEWLINE_LF
:
return
Py_BuildValue
(
"(ss)"
,
"
\r
"
,
"
\n
"
);
case
NEWLINE_CRLF
:
return
Py
String_FromString
(
"
\r\n
"
);
return
Py
Bytes_FromStringAndSize
(
"
\r\n
"
,
2
);
case
NEWLINE_CR
|
NEWLINE_CRLF
:
return
Py_BuildValue
(
"(ss)"
,
"
\r
"
,
"
\r\n
"
);
case
NEWLINE_LF
|
NEWLINE_CRLF
:
...
...
@@ -1220,8 +1240,8 @@ BZ2File_get_newlines(BZ2FileObject *self, void *closure)
case
NEWLINE_CR
|
NEWLINE_LF
|
NEWLINE_CRLF
:
return
Py_BuildValue
(
"(sss)"
,
"
\r
"
,
"
\n
"
,
"
\r\n
"
);
default:
PyErr_Format
(
PyExc_SystemError
,
"Unknown newlines value 0x%x
\n
"
,
PyErr_Format
(
PyExc_SystemError
,
"Unknown newlines value 0x%x
\n
"
,
self
->
f_newlinetypes
);
return
NULL
;
}
...
...
@@ -1248,7 +1268,7 @@ BZ2File_get_name(BZ2FileObject *self, void *closure)
static
PyGetSetDef
BZ2File_getset
[]
=
{
{
"closed"
,
(
getter
)
BZ2File_get_closed
,
NULL
,
"True if the file is closed"
},
{
"newlines"
,
(
getter
)
BZ2File_get_newlines
,
NULL
,
{
"newlines"
,
(
getter
)
BZ2File_get_newlines
,
NULL
,
"end-of-line convention used in this file"
},
{
"mode"
,
(
getter
)
BZ2File_get_mode
,
NULL
,
"file mode ('r', 'w', or 'U')"
},
...
...
@@ -1413,7 +1433,7 @@ BZ2File_getiter(BZ2FileObject *self)
static
PyObject
*
BZ2File_iternext
(
BZ2FileObject
*
self
)
{
Py
String
Object
*
ret
;
Py
Bytes
Object
*
ret
;
ACQUIRE_LOCK
(
self
);
if
(
self
->
mode
==
MODE_CLOSED
)
{
PyErr_SetString
(
PyExc_ValueError
,
...
...
@@ -1422,7 +1442,7 @@ BZ2File_iternext(BZ2FileObject *self)
}
ret
=
Util_ReadAheadGetLineSkip
(
self
,
0
,
READAHEAD_BUFSIZE
);
RELEASE_LOCK
(
self
);
if
(
ret
==
NULL
||
Py
String
_GET_SIZE
(
ret
)
==
0
)
{
if
(
ret
==
NULL
||
Py
Bytes
_GET_SIZE
(
ret
)
==
0
)
{
Py_XDECREF
(
ret
);
return
NULL
;
}
...
...
@@ -1525,7 +1545,7 @@ BZ2Comp_compress(BZ2CompObject *self, PyObject *args)
return
NULL
;
if
(
datasize
==
0
)
return
Py
String_FromString
(
""
);
return
Py
Bytes_FromStringAndSize
(
""
,
0
);
ACQUIRE_LOCK
(
self
);
if
(
!
self
->
running
)
{
...
...
@@ -1534,7 +1554,7 @@ BZ2Comp_compress(BZ2CompObject *self, PyObject *args)
goto
error
;
}
ret
=
Py
String
_FromStringAndSize
(
NULL
,
bufsize
);
ret
=
Py
Bytes
_FromStringAndSize
(
NULL
,
bufsize
);
if
(
!
ret
)
goto
error
;
...
...
@@ -1557,7 +1577,7 @@ BZ2Comp_compress(BZ2CompObject *self, PyObject *args)
break
;
/* no more input data */
if
(
bzs
->
avail_out
==
0
)
{
bufsize
=
Util_NewBufferSize
(
bufsize
);
if
(
_PyString_Resize
(
&
ret
,
bufsize
)
<
0
)
{
if
(
PyBytes_Resize
(
ret
,
bufsize
)
<
0
)
{
BZ2_bzCompressEnd
(
bzs
);
goto
error
;
}
...
...
@@ -1567,7 +1587,9 @@ BZ2Comp_compress(BZ2CompObject *self, PyObject *args)
}
}
_PyString_Resize
(
&
ret
,
(
Py_ssize_t
)(
BZS_TOTAL_OUT
(
bzs
)
-
totalout
));
if
(
PyBytes_Resize
(
ret
,
(
Py_ssize_t
)(
BZS_TOTAL_OUT
(
bzs
)
-
totalout
))
<
0
)
goto
error
;
RELEASE_LOCK
(
self
);
return
ret
;
...
...
@@ -1602,7 +1624,7 @@ BZ2Comp_flush(BZ2CompObject *self)
}
self
->
running
=
0
;
ret
=
Py
String
_FromStringAndSize
(
NULL
,
bufsize
);
ret
=
Py
Bytes
_FromStringAndSize
(
NULL
,
bufsize
);
if
(
!
ret
)
goto
error
;
...
...
@@ -1623,7 +1645,7 @@ BZ2Comp_flush(BZ2CompObject *self)
}
if
(
bzs
->
avail_out
==
0
)
{
bufsize
=
Util_NewBufferSize
(
bufsize
);
if
(
_PyString_Resize
(
&
ret
,
bufsize
)
<
0
)
if
(
PyBytes_Resize
(
ret
,
bufsize
)
<
0
)
goto
error
;
bzs
->
next_out
=
BUF
(
ret
);
bzs
->
next_out
=
BUF
(
ret
)
+
(
BZS_TOTAL_OUT
(
bzs
)
...
...
@@ -1632,8 +1654,11 @@ BZ2Comp_flush(BZ2CompObject *self)
}
}
if
(
bzs
->
avail_out
!=
0
)
_PyString_Resize
(
&
ret
,
(
Py_ssize_t
)(
BZS_TOTAL_OUT
(
bzs
)
-
totalout
));
if
(
bzs
->
avail_out
!=
0
)
{
if
(
PyBytes_Resize
(
ret
,
(
Py_ssize_t
)(
BZS_TOTAL_OUT
(
bzs
)
-
totalout
))
<
0
)
goto
error
;
}
RELEASE_LOCK
(
self
);
return
ret
;
...
...
@@ -1816,7 +1841,7 @@ BZ2Decomp_decompress(BZ2DecompObject *self, PyObject *args)
goto
error
;
}
ret
=
Py
String
_FromStringAndSize
(
NULL
,
bufsize
);
ret
=
Py
Bytes
_FromStringAndSize
(
NULL
,
bufsize
);
if
(
!
ret
)
goto
error
;
...
...
@@ -1835,7 +1860,7 @@ BZ2Decomp_decompress(BZ2DecompObject *self, PyObject *args)
if
(
bzs
->
avail_in
!=
0
)
{
Py_DECREF
(
self
->
unused_data
);
self
->
unused_data
=
Py
String
_FromStringAndSize
(
bzs
->
next_in
,
Py
Bytes
_FromStringAndSize
(
bzs
->
next_in
,
bzs
->
avail_in
);
}
self
->
running
=
0
;
...
...
@@ -1849,7 +1874,7 @@ BZ2Decomp_decompress(BZ2DecompObject *self, PyObject *args)
break
;
/* no more input data */
if
(
bzs
->
avail_out
==
0
)
{
bufsize
=
Util_NewBufferSize
(
bufsize
);
if
(
_PyString_Resize
(
&
ret
,
bufsize
)
<
0
)
{
if
(
PyBytes_Resize
(
ret
,
bufsize
)
<
0
)
{
BZ2_bzDecompressEnd
(
bzs
);
goto
error
;
}
...
...
@@ -1860,8 +1885,11 @@ BZ2Decomp_decompress(BZ2DecompObject *self, PyObject *args)
}
}
if
(
bzs
->
avail_out
!=
0
)
_PyString_Resize
(
&
ret
,
(
Py_ssize_t
)(
BZS_TOTAL_OUT
(
bzs
)
-
totalout
));
if
(
bzs
->
avail_out
!=
0
)
{
if
(
PyBytes_Resize
(
ret
,
(
Py_ssize_t
)(
BZS_TOTAL_OUT
(
bzs
)
-
totalout
))
<
0
)
goto
error
;
}
RELEASE_LOCK
(
self
);
return
ret
;
...
...
@@ -1897,7 +1925,7 @@ BZ2Decomp_init(BZ2DecompObject *self, PyObject *args, PyObject *kwargs)
}
#endif
self
->
unused_data
=
Py
String_FromString
(
""
);
self
->
unused_data
=
Py
Bytes_FromStringAndSize
(
""
,
0
);
if
(
!
self
->
unused_data
)
goto
error
;
...
...
@@ -2031,7 +2059,7 @@ bz2_compress(PyObject *self, PyObject *args, PyObject *kwargs)
* data in one shot. We will check it later anyway. */
bufsize
=
datasize
+
(
datasize
/
100
+
1
)
+
600
;
ret
=
Py
String
_FromStringAndSize
(
NULL
,
bufsize
);
ret
=
Py
Bytes
_FromStringAndSize
(
NULL
,
bufsize
);
if
(
!
ret
)
return
NULL
;
...
...
@@ -2063,7 +2091,7 @@ bz2_compress(PyObject *self, PyObject *args, PyObject *kwargs)
}
if
(
bzs
->
avail_out
==
0
)
{
bufsize
=
Util_NewBufferSize
(
bufsize
);
if
(
_PyString_Resize
(
&
ret
,
bufsize
)
<
0
)
{
if
(
PyBytes_Resize
(
ret
,
bufsize
)
<
0
)
{
BZ2_bzCompressEnd
(
bzs
);
Py_DECREF
(
ret
);
return
NULL
;
...
...
@@ -2073,8 +2101,12 @@ bz2_compress(PyObject *self, PyObject *args, PyObject *kwargs)
}
}
if
(
bzs
->
avail_out
!=
0
)
_PyString_Resize
(
&
ret
,
(
Py_ssize_t
)
BZS_TOTAL_OUT
(
bzs
));
if
(
bzs
->
avail_out
!=
0
)
{
if
(
PyBytes_Resize
(
ret
,
(
Py_ssize_t
)
BZS_TOTAL_OUT
(
bzs
))
<
0
)
{
Py_DECREF
(
ret
);
ret
=
NULL
;
}
}
BZ2_bzCompressEnd
(
bzs
);
return
ret
;
...
...
@@ -2102,9 +2134,9 @@ bz2_decompress(PyObject *self, PyObject *args)
return
NULL
;
if
(
datasize
==
0
)
return
Py
String_FromString
(
""
);
return
Py
Bytes_FromStringAndSize
(
""
,
0
);
ret
=
Py
String
_FromStringAndSize
(
NULL
,
bufsize
);
ret
=
Py
Bytes
_FromStringAndSize
(
NULL
,
bufsize
);
if
(
!
ret
)
return
NULL
;
...
...
@@ -2143,7 +2175,7 @@ bz2_decompress(PyObject *self, PyObject *args)
}
if
(
bzs
->
avail_out
==
0
)
{
bufsize
=
Util_NewBufferSize
(
bufsize
);
if
(
_PyString_Resize
(
&
ret
,
bufsize
)
<
0
)
{
if
(
PyBytes_Resize
(
ret
,
bufsize
)
<
0
)
{
BZ2_bzDecompressEnd
(
bzs
);
Py_DECREF
(
ret
);
return
NULL
;
...
...
@@ -2153,8 +2185,12 @@ bz2_decompress(PyObject *self, PyObject *args)
}
}
if
(
bzs
->
avail_out
!=
0
)
_PyString_Resize
(
&
ret
,
(
Py_ssize_t
)
BZS_TOTAL_OUT
(
bzs
));
if
(
bzs
->
avail_out
!=
0
)
{
if
(
PyBytes_Resize
(
ret
,
(
Py_ssize_t
)
BZS_TOTAL_OUT
(
bzs
))
<
0
)
{
Py_DECREF
(
ret
);
ret
=
NULL
;
}
}
BZ2_bzDecompressEnd
(
bzs
);
return
ret
;
...
...
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment