forked from sheetjs/sheetjs
fix: infinite loop due to hidden row in XLSX.stream.to_json (#3178)
**Title:** Fix for Incorrect Row Indexing and Infinite Loop in stream.to_json Function **Description:** This pull request addresses two key issues in the `stream.to_json` function of the SheetJS library: 1. **Infinite Loop**: Previously, when a row was hidden, the function skipped processing the current row without incrementing the row counter `R`, resulting in an infinite loop during execution. 2. **Incorrect Row Indexing**: The row index was incorrectly accessed using a one-based index, whereas the actual row index was zero-based. This led to unintended hidden rows being included in the stream and skipping of subsequent non-hidden rows. **Changes:** - Modified the hidden row check to use the correct zero-based indexing - Incremented `R` after identifying a hidden row to ensure the loop progresses to the next row. - Ensured that the stream correctly processes all rows, skipping hidden rows without affecting subsequent rows. **Testing:** - Validated that the `stream.to_json` function no longer enters an infinite loop when encountering hidden rows. - Confirmed that the correct rows are processed and pushed to the stream, with hidden rows being appropriately skipped. **Impact:** This fix enhances the reliability of the SheetJS library, ensuring accurate data streaming from spreadsheets without infinite loops or incorrect row handling. **Checklist:** - [x] Code changes have been tested locally. - [x] The changes adhere to the project's coding standards and guidelines. **Additional Information:** These changes are crucial for maintaining the library's functionality in production environments, where precise data handling is essential. **References:** Closes #3176. --- Reviewed-on: sheetjs/sheetjs#3178 Co-authored-by: deepak-negi-web <deepak-negi-web@noreply.git.sheetjs.com> Co-committed-by: deepak-negi-web <deepak-negi-web@noreply.git.sheetjs.com>
This commit is contained in:
parent
9368a85b5f
commit
5550b90704
@ -103,7 +103,10 @@ function write_json_stream(sheet/*:Worksheet*/, opts/*:?Sheet2CSVOpts*/) {
|
||||
R = r.s.r + offset;
|
||||
stream._read = function() {
|
||||
while(R <= r.e.r) {
|
||||
if ((rowinfo[R-1]||{}).hidden) continue;
|
||||
if ((rowinfo[R]||{}).hidden) {
|
||||
++R;
|
||||
continue;
|
||||
};
|
||||
var row = make_json_row(sheet, r, R, cols, header, hdr, o);
|
||||
++R;
|
||||
if((row.isempty === false) || (header === 1 ? o.blankrows !== false : !!o.blankrows)) {
|
||||
|
Loading…
Reference in New Issue
Block a user