Skip to content

Commit d3b0258

Browse files
committed
fix PyByteArray_Concat
1 parent c55e054 commit d3b0258

File tree

1 file changed

+29
-4
lines changed

1 file changed

+29
-4
lines changed

tree_sitter/binding/node.c

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -589,6 +589,7 @@ PyObject *node_get_text(Node *self, void *Py_UNUSED(payload)) {
589589
}
590590

591591
TSPoint start_point = ts_node_start_point(self->node);
592+
TSPoint end_point = ts_node_end_point(self->node);
592593

593594
TSPoint current_point = start_point;
594595
size_t current_offset = start_offset;
@@ -619,12 +620,23 @@ PyObject *node_get_text(Node *self, void *Py_UNUSED(payload)) {
619620
return NULL;
620621
}
621622

622-
if (PyByteArray_Concat(collected_bytes, rv) == NULL) {
623-
Py_XDECREF(rv);
623+
PyObject *rv_bytearray = PyByteArray_FromObject(rv);
624+
if (rv_bytearray == NULL) {
624625
Py_XDECREF(collected_bytes);
626+
Py_XDECREF(rv);
625627
return NULL;
626628
}
627-
Py_XDECREF(rv);
629+
630+
PyObject *new_collected_bytes = PyByteArray_Concat(collected_bytes, rv_bytearray);
631+
Py_DECREF(rv_bytearray);
632+
Py_DECREF(collected_bytes);
633+
634+
if (new_collected_bytes == NULL) {
635+
Py_XDECREF(rv);
636+
return NULL;
637+
}
638+
639+
collected_bytes = new_collected_bytes;
628640

629641
// Update current_point and current_offset
630642
Py_ssize_t bytes_read = PyBytes_Size(rv);
@@ -639,7 +651,20 @@ PyObject *node_get_text(Node *self, void *Py_UNUSED(payload)) {
639651
current_offset += bytes_read;
640652
}
641653

642-
result = PyBytes_FromObject(collected_bytes);
654+
PyObject *start_byte = PyLong_FromUnsignedLong(0);
655+
PyObject *end_byte = PyLong_FromUnsignedLong(end_offset - start_offset);
656+
PyObject *slice = PySlice_New(start_byte, end_byte, NULL);
657+
Py_XDECREF(start_byte);
658+
Py_XDECREF(end_byte);
659+
660+
if (slice == NULL) {
661+
Py_DECREF(collected_bytes);
662+
return NULL;
663+
}
664+
665+
result = PyObject_GetItem(collected_bytes, slice);
666+
Py_DECREF(slice);
667+
643668
Py_XDECREF(collected_bytes);
644669
}
645670
return result;

0 commit comments

Comments
 (0)