From 8523a51623b3f9196a5002da0e4a842488d340ba Mon Sep 17 00:00:00 2001 From: "jianghang.loujh" Date: Tue, 5 Aug 2025 14:26:57 +0800 Subject: [PATCH] fixed JSON datatype string parse --- .../java/com/taobao/tddl/dbsync/binlog/JsonConversion.java | 6 +++--- .../main/java/com/taobao/tddl/dbsync/binlog/LogBuffer.java | 5 +++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/dbsync/src/main/java/com/taobao/tddl/dbsync/binlog/JsonConversion.java b/dbsync/src/main/java/com/taobao/tddl/dbsync/binlog/JsonConversion.java index 07c5d8be..69bd7664 100644 --- a/dbsync/src/main/java/com/taobao/tddl/dbsync/binlog/JsonConversion.java +++ b/dbsync/src/main/java/com/taobao/tddl/dbsync/binlog/JsonConversion.java @@ -158,7 +158,7 @@ public class JsonConversion { throw new IllegalArgumentException("illegal json data"); } return new Json_Value(Json_enum_type.STRING, - buffer.rewind().forward((int) n).getFixStringIgnore0000((int) str_len, charset)); + buffer.rewind().forward((int) n).getFixLengthString((int) str_len, charset)); case JSONB_TYPE_OPAQUE: /* * There should always be at least one byte, which tells the field type of the @@ -257,7 +257,7 @@ public class JsonConversion { // entry, always two // bytes. long key_length = m_data.getUint16(); - return m_data.rewind().forward((int) key_offset).getFixStringIgnore0000((int) key_length, charset); + return m_data.rewind().forward((int) key_offset).getFixLengthString((int) key_length, charset); } public Json_Value element(int i, Charset charset) { @@ -400,7 +400,7 @@ public class JsonConversion { } buf.append('"').append(text).append('"'); } else { - text = m_data.getFixStringIgnore0000((int) m_length, charset); + text = m_data.getFixLengthString((int) m_length, charset); buf.append('"').append(escapse(text)).append('"'); } diff --git a/dbsync/src/main/java/com/taobao/tddl/dbsync/binlog/LogBuffer.java b/dbsync/src/main/java/com/taobao/tddl/dbsync/binlog/LogBuffer.java index b74497e7..2f269e0e 100644 --- a/dbsync/src/main/java/com/taobao/tddl/dbsync/binlog/LogBuffer.java +++ b/dbsync/src/main/java/com/taobao/tddl/dbsync/binlog/LogBuffer.java @@ -1157,9 +1157,10 @@ public class LogBuffer { } /** - * Return next fix length string from buffer. ignore \0 + * Return next fix length string from buffer. + * see json_binary.cc read_variable_length */ - public final String getFixStringIgnore0000(final int len, Charset charset) { + public final String getFixLengthString(final int len, Charset charset) { if (position + len > origin + limit) { throw new IllegalArgumentException("limit excceed: " + (position + len - origin)); }