Skip to content

Commit fbcd395

Browse files
Fixed bug resulting in an internal protocol error when handling database
responses.
1 parent e8b5e23 commit fbcd395

File tree

2 files changed

+13
-8
lines changed

2 files changed

+13
-8
lines changed

doc/src/release_notes.rst

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@ Thin Mode Changes
3737
ADDRESS and ADDRESS_LIST components at the same level.
3838
#) The complete connect string is now sent to the server instead of just the
3939
actual components being used. This is important for some configurations.
40+
#) Fixed bug resulting in an internal protocol error when handling database
41+
responses.
4042

4143
Thick Mode Changes
4244
++++++++++++++++++

src/oracledb/impl/thin/messages.pyx

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,7 @@ cdef class Message:
197197
pass
198198
elif opcode == TNS_SERVER_PIGGYBACK_OS_PID_MTS:
199199
buf.read_ub2(&temp16)
200-
buf.skip_raw_bytes(temp16 + 1)
200+
buf.skip_raw_bytes_chunked()
201201
elif opcode == TNS_SERVER_PIGGYBACK_SYNC:
202202
buf.skip_ub2() # skip number of DTYs
203203
buf.skip_ub1() # skip length of DTYs
@@ -206,10 +206,10 @@ cdef class Message:
206206
for i in range(num_elements):
207207
buf.read_ub2(&temp16)
208208
if temp16 > 0: # skip key
209-
buf.skip_raw_bytes(temp16 + 1)
209+
buf.skip_raw_bytes_chunked()
210210
buf.read_ub2(&temp16)
211211
if temp16 > 0: # skip value
212-
buf.skip_raw_bytes(temp16 + 1)
212+
buf.skip_raw_bytes_chunked()
213213
buf.skip_ub2() # skip flags
214214
buf.skip_ub4() # skip overall flags
215215
elif opcode == TNS_SERVER_PIGGYBACK_EXT_SYNC:
@@ -228,15 +228,18 @@ cdef class Message:
228228
buf.skip_ub2()
229229
buf.skip_ub1()
230230
buf.read_ub2(&num_elements)
231+
print("num elements:", num_elements)
231232
if num_elements > 0:
232233
buf.skip_ub1()
233234
for i in range(num_elements):
234235
buf.read_ub2(&temp16)
236+
print("element:", i, "key length:", temp16)
235237
if temp16 > 0: # skip key
236-
buf.skip_raw_bytes(temp16 + 1)
238+
buf.skip_raw_bytes_chunked()
237239
buf.read_ub2(&temp16)
240+
print("element:", i, "value length:", temp16)
238241
if temp16 > 0: # skip value
239-
buf.skip_raw_bytes(temp16 + 1)
242+
buf.skip_raw_bytes_chunked()
240243
buf.skip_ub2() # skip flags
241244
buf.read_ub4(&flags) # session flags
242245
if flags & TNS_SESSGET_SESSION_CHANGED:
@@ -720,14 +723,14 @@ cdef class MessageWithData(Message):
720723
fetch_info)
721724
buf.read_ub4(&num_bytes)
722725
if num_bytes > 0:
723-
buf.skip_raw_bytes(num_bytes + 1) # current date
726+
buf.skip_raw_bytes_chunked() # current date
724727
buf.skip_ub4() # dcbflag
725728
buf.skip_ub4() # dcbmdbz
726729
buf.skip_ub4() # dcbmnpr
727730
buf.skip_ub4() # dcbmxpr
728731
buf.read_ub4(&num_bytes)
729732
if num_bytes > 0:
730-
buf.skip_raw_bytes(num_bytes + 1) # dcbqcky
733+
buf.skip_raw_bytes_chunked() # dcbqcky
731734
stmt._fetch_vars = cursor_impl.fetch_vars
732735
stmt._fetch_var_impls = cursor_impl.fetch_var_impls
733736
stmt._num_columns = cursor_impl._num_columns
@@ -916,7 +919,7 @@ cdef class MessageWithData(Message):
916919
self._get_bit_vector(buf, num_bytes)
917920
buf.read_ub4(&num_bytes)
918921
if num_bytes > 0:
919-
buf.skip_raw_bytes(num_bytes + 1) # rxhrid
922+
buf.skip_raw_bytes_chunked() # rxhrid
920923

921924
cdef int _write_column_metadata(self, WriteBuffer buf,
922925
list bind_var_impls) except -1:

0 commit comments

Comments
 (0)