From 982a6f18725df63f1456a3a4543debc3dd47a0c0 Mon Sep 17 00:00:00 2001 From: Aditya Kumar Date: Mon, 9 Nov 2026 03:21:31 +0530 Subject: [PATCH 1/2] fix: handle null strings in string replacment functions --- .../@stdlib/string/base/replace-after-last/lib/main.js | 2 +- lib/node_modules/@stdlib/string/base/replace-after/lib/main.js | 2 +- .../@stdlib/string/base/replace-before-last/lib/main.js | 2 +- lib/node_modules/@stdlib/string/base/replace-before/lib/main.js | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/node_modules/@stdlib/string/base/replace-after-last/lib/main.js b/lib/node_modules/@stdlib/string/base/replace-after-last/lib/main.js index a51d1aa044d9..ef4d2126fad3 100644 --- a/lib/node_modules/@stdlib/string/base/replace-after-last/lib/main.js +++ b/lib/node_modules/@stdlib/string/base/replace-after-last/lib/main.js @@ -68,7 +68,7 @@ function replaceAfterLast( str, search, replacement, fromIndex ) { } } idx = str.lastIndexOf( search, fromIndex ); - if ( str === '' || search === '' || replacement === '' || idx < 0 ) { + if ( str === '' || search === '' || idx < 0 ) { return str; } return str.substring( 0, idx + search.length ) + replacement; diff --git a/lib/node_modules/@stdlib/string/base/replace-after/lib/main.js b/lib/node_modules/@stdlib/string/base/replace-after/lib/main.js index b78bd8239c72..051f49681a5a 100644 --- a/lib/node_modules/@stdlib/string/base/replace-after/lib/main.js +++ b/lib/node_modules/@stdlib/string/base/replace-after/lib/main.js @@ -61,7 +61,7 @@ function replaceAfter( str, search, replacement, fromIndex ) { return str; } idx = str.indexOf( search, fromIndex ); - if ( str === '' || search === '' || replacement === '' || idx < 0 ) { + if ( str === '' || search === '' || idx < 0 ) { return str; } return str.substring( 0, idx + search.length ) + replacement; diff --git a/lib/node_modules/@stdlib/string/base/replace-before-last/lib/main.js b/lib/node_modules/@stdlib/string/base/replace-before-last/lib/main.js index 8e9eb0998183..2557ec28fffc 100644 --- a/lib/node_modules/@stdlib/string/base/replace-before-last/lib/main.js +++ b/lib/node_modules/@stdlib/string/base/replace-before-last/lib/main.js @@ -68,7 +68,7 @@ function replaceBeforeLast( str, search, replacement, fromIndex ) { } } idx = str.lastIndexOf( search, fromIndex ); - if ( str === '' || search === '' || replacement === '' || idx < 0 ) { + if ( str === '' || search === '' || idx < 0 ) { return str; } return replacement + str.substring( idx ); diff --git a/lib/node_modules/@stdlib/string/base/replace-before/lib/main.js b/lib/node_modules/@stdlib/string/base/replace-before/lib/main.js index 03758630dc93..e8e77c5d6d38 100644 --- a/lib/node_modules/@stdlib/string/base/replace-before/lib/main.js +++ b/lib/node_modules/@stdlib/string/base/replace-before/lib/main.js @@ -53,7 +53,7 @@ function replaceBefore( str, search, replacement, fromIndex ) { return str; } idx = str.indexOf( search, fromIndex ); - if ( str === '' || search === '' || replacement === '' || idx < 0 ) { + if ( str === '' || search === '' || idx < 0 ) { return str; } return replacement + str.substring( idx ); From d7068071ff9cb58598fcdb508e05f5b4cc7523f7 Mon Sep 17 00:00:00 2001 From: Aditya Kumar Date: Mon, 9 Nov 2026 03:22:32 +0530 Subject: [PATCH 2/2] chore: add testcases for null strings --- .../base/replace-after-last/test/test.js | 13 +++++++++++++ .../string/base/replace-after/test/test.js | 19 +++++++++++++++++++ .../base/replace-before-last/test/test.js | 13 +++++++++++++ .../string/base/replace-before/test/test.js | 11 +++++++++++ .../string/replace-before/test/test.js | 11 +++++++++++ 5 files changed, 67 insertions(+) diff --git a/lib/node_modules/@stdlib/string/base/replace-after-last/test/test.js b/lib/node_modules/@stdlib/string/base/replace-after-last/test/test.js index 25a444ec6edb..2dee20acebef 100644 --- a/lib/node_modules/@stdlib/string/base/replace-after-last/test/test.js +++ b/lib/node_modules/@stdlib/string/base/replace-after-last/test/test.js @@ -141,3 +141,16 @@ tape( 'the function returns the entire string if the search string is the empty t.end(); }); + +tape( 'the function replaces the substring after the last occurrence of a search string when replacement is the empty string', function test( t ) { + var expected; + var actual; + var str; + + str = 'beep boop baz'; + actual = replaceAfterLast( str, 'p', '', str.length ); + expected = 'beep boop'; + t.strictEqual( actual, expected, 'returns expected value' ); + + t.end(); +}); diff --git a/lib/node_modules/@stdlib/string/base/replace-after/test/test.js b/lib/node_modules/@stdlib/string/base/replace-after/test/test.js index 4a776e158521..7b62b29a2d4b 100644 --- a/lib/node_modules/@stdlib/string/base/replace-after/test/test.js +++ b/lib/node_modules/@stdlib/string/base/replace-after/test/test.js @@ -128,3 +128,22 @@ tape( 'the function returns the entire string if the search string is the empty t.end(); }); + +tape( 'the function replaces the substring after a search string when replacement is the empty string', function test( t ) { + var expected; + var actual; + + actual = replaceAfter( 'beep boop', ' ', '', 0 ); + expected = 'beep '; + t.strictEqual( actual, expected, 'returns expected value' ); + + actual = replaceAfter( 'beep boop', 'p', '', 0 ); + expected = 'beep'; + t.strictEqual( actual, expected, 'returns expected value' ); + + actual = replaceAfter( 'Hello World!', 'Hello', '', 0 ); + expected = 'Hello'; + t.strictEqual( actual, expected, 'returns expected value' ); + + t.end(); +}); diff --git a/lib/node_modules/@stdlib/string/base/replace-before-last/test/test.js b/lib/node_modules/@stdlib/string/base/replace-before-last/test/test.js index 23857648a2a7..74ad659b8489 100644 --- a/lib/node_modules/@stdlib/string/base/replace-before-last/test/test.js +++ b/lib/node_modules/@stdlib/string/base/replace-before-last/test/test.js @@ -141,3 +141,16 @@ tape( 'the function returns the entire string if the search string is the empty t.end(); }); + +tape( 'the function replaces the substring before the last occurrence of a search string when replacement is the empty string', function test( t ) { + var expected; + var actual; + var str; + + str = 'beep boop baz'; + actual = replaceBeforeLast( str, 'p', '', str.length ); + expected = 'p baz'; + t.strictEqual( actual, expected, 'returns expected value' ); + + t.end(); +}); diff --git a/lib/node_modules/@stdlib/string/base/replace-before/test/test.js b/lib/node_modules/@stdlib/string/base/replace-before/test/test.js index 6e2205dec1dd..c0a6580c3487 100644 --- a/lib/node_modules/@stdlib/string/base/replace-before/test/test.js +++ b/lib/node_modules/@stdlib/string/base/replace-before/test/test.js @@ -133,3 +133,14 @@ tape( 'the function returns the entire string if the search string is the empty t.end(); }); + +tape( 'the function replaces the substring before a search string when replacement is the empty string', function test( t ) { + var expected; + var actual; + + actual = replaceBefore( 'Hello World!', 'World', '', 0 ); + expected = 'World!'; + t.strictEqual( actual, expected, 'returns expected value' ); + + t.end(); +}); diff --git a/lib/node_modules/@stdlib/string/replace-before/test/test.js b/lib/node_modules/@stdlib/string/replace-before/test/test.js index bc46f53562c3..1c605193bd51 100644 --- a/lib/node_modules/@stdlib/string/replace-before/test/test.js +++ b/lib/node_modules/@stdlib/string/replace-before/test/test.js @@ -176,3 +176,14 @@ tape( 'the function returns the entire string if the search string is the empty t.end(); }); + +tape( 'the function replaces the substring before a search string when replacement is the empty string', function test( t ) { + var expected; + var actual; + + actual = replaceBefore( 'Hello World!', 'World', '' ); + expected = 'World!'; + t.strictEqual( actual, expected, 'returns expected value' ); + + t.end(); +});