Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

readline: fix the REPL on editor mode crashing during tab completion #43543

Merged
merged 1 commit into from
Jun 28, 2022

Conversation

cola119
Copy link
Member

@cola119 cola119 commented Jun 23, 2022

Fixes #43528. This PR fixes the REPL on editor mode crashing during tab completion.

The root cause of this issue is that commonPrefix could receive an empty array of completions because of #41632.

On editor mode, the completions are converted into the common prefix string in REPLServer.prototype.completeOnEditorModeL1603 (I'm not sure why this wrapper is needed). And then [kTabCompleter]() is called as a callback with the completion as its argument.

node/lib/repl.js

Lines 1596 to 1607 in 6f924ac

REPLServer.prototype.completeOnEditorMode = (callback) => (err, results) => {
if (err) return callback(err);
const { 0: completions, 1: completeOn = '' } = results;
let result = ArrayPrototypeFilter(completions, Boolean);
if (completeOn && result.length !== 0) {
result = [commonPrefix(result)];
}
callback(null, [result, completeOn]);
};

For example, the completions for a are ['async', 'await', 'Array', ...] (note that #41632 made REPL case-incentive) and their common prefix string is '' (the return value of commonPrefix(['async', 'await', 'Array', ...])).
This means the completions is [''] when [kTabCompleter]() is called, and commonPrefix([]) will be called at L670.

[kTabCompleter](lastKeypressWasTab, { 0: completions, 1: completeOn }) {
// Result and the text that was completed.
if (!completions || completions.length === 0) {
return;
}
// If there is a common prefix to all matches, then apply that portion.
const prefix = commonPrefix(
ArrayPrototypeFilter(completions, (e) => e !== '')
);

@nodejs-github-bot nodejs-github-bot added needs-ci PRs that need a full CI run. readline Issues and PRs related to the built-in readline module. labels Jun 23, 2022
@aduh95 aduh95 added author ready PRs that have at least one approval, no pending requests for changes, and a CI started. request-ci Add this label to start a Jenkins CI on a PR. labels Jun 27, 2022
@github-actions github-actions bot removed the request-ci Add this label to start a Jenkins CI on a PR. label Jun 27, 2022
@nodejs-github-bot
Copy link
Collaborator

@ZYSzys ZYSzys added commit-queue Add this label to land a pull request using GitHub Actions. and removed needs-ci PRs that need a full CI run. labels Jun 28, 2022
@nodejs-github-bot nodejs-github-bot removed the commit-queue Add this label to land a pull request using GitHub Actions. label Jun 28, 2022
@nodejs-github-bot nodejs-github-bot merged commit 593de05 into nodejs:main Jun 28, 2022
@nodejs-github-bot
Copy link
Collaborator

Landed in 593de05

targos pushed a commit that referenced this pull request Jul 12, 2022
PR-URL: #43543
Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com>
Reviewed-By: Tobias Nießen <tniessen@tnie.de>
Reviewed-By: Yongsheng Zhang <zyszys98@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
targos pushed a commit that referenced this pull request Jul 20, 2022
PR-URL: #43543
Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com>
Reviewed-By: Tobias Nießen <tniessen@tnie.de>
Reviewed-By: Yongsheng Zhang <zyszys98@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
targos pushed a commit that referenced this pull request Jul 31, 2022
PR-URL: #43543
Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com>
Reviewed-By: Tobias Nießen <tniessen@tnie.de>
Reviewed-By: Yongsheng Zhang <zyszys98@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
guangwong pushed a commit to noslate-project/node that referenced this pull request Oct 10, 2022
PR-URL: nodejs/node#43543
Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com>
Reviewed-By: Tobias Nießen <tniessen@tnie.de>
Reviewed-By: Yongsheng Zhang <zyszys98@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
author ready PRs that have at least one approval, no pending requests for changes, and a CI started. readline Issues and PRs related to the built-in readline module.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

REPL in editor mode crashes during tab completion
6 participants