Skip to content

fix(frontend): handle NaN in parseUploadedFiles size parsing#1795

Open
hobostay wants to merge 1 commit into
bytedance:mainfrom
hobostay:fix/parseint-nan-bug-in-parseuploadedfiles
Open

fix(frontend): handle NaN in parseUploadedFiles size parsing#1795
hobostay wants to merge 1 commit into
bytedance:mainfrom
hobostay:fix/parseint-nan-bug-in-parseuploadedfiles

Conversation

@hobostay
Copy link
Copy Markdown
Contributor

@hobostay hobostay commented Apr 3, 2026

Fixes #1794

Problem

The parseUploadedFiles function in frontend/src/core/messages/utils.ts
uses parseInt(fileMatch[2].trim(), 10) ?? 0 to parse file sizes. However,
the nullish coalescing operator (??) only handles null and undefined,
not NaN. When the size string cannot be parsed as a valid integer,
parseInt returns NaN, which is not caught by ??, causing the file
size to be NaN instead of 0.

Root Cause

  • parseInt('invalid', 10) returns NaN (not null or undefined)
  • The ?? operator only checks for null/undefined, not NaN
  • Invalid size strings result in NaN being stored as the file size

Fix

Split the parsing into a separate step and use isNaN() to explicitly
check for NaN values:

const size = parseInt(fileMatch[2].trim(), 10);
files.push({
  filename: fileMatch[1].trim(),
  size: isNaN(size) ? 0 : size,
  path: fileMatch[3].trim(),
});

This ensures that any non-numeric size values default to 0 instead of
NaN.

Test Case

Before this fix, calling parseUploadedFiles with content like:

<uploaded_files>- file.txt (invalid_size)
  Path: /path/to/file</uploaded_files>

Would result in { filename: "file.txt", size: NaN, path: "/path/to/file" }.

After this fix, the result is:
{ filename: "file.txt", size: 0, path: "/path/to/file" }.

Fixes bytedance#1794

## Problem

The `parseUploadedFiles` function in `frontend/src/core/messages/utils.ts`
uses `parseInt(fileMatch[2].trim(), 10) ?? 0` to parse file sizes. However,
the nullish coalescing operator (`??`) only handles `null` and `undefined`,
not `NaN`. When the size string cannot be parsed as a valid integer,
`parseInt` returns `NaN`, which is not caught by `??`, causing the file
size to be `NaN` instead of `0`.

## Root Cause

- `parseInt('invalid', 10)` returns `NaN` (not `null` or `undefined`)
- The `??` operator only checks for `null`/`undefined`, not `NaN`
- Invalid size strings result in `NaN` being stored as the file size

## Fix

Split the parsing into a separate step and use `isNaN()` to explicitly
check for `NaN` values:

```typescript
const size = parseInt(fileMatch[2].trim(), 10);
files.push({
  filename: fileMatch[1].trim(),
  size: isNaN(size) ? 0 : size,
  path: fileMatch[3].trim(),
});
```

This ensures that any non-numeric size values default to `0` instead of
`NaN`.
@CLAassistant
Copy link
Copy Markdown

CLA assistant check
Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.


Test User seems not to be a GitHub user. You need a GitHub account to be able to sign the CLA. If you have already a GitHub account, please add the email address used for this commit to your account.
You have signed the CLA already but the status is still pending? Let us recheck it.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

通过ollama调用本地大模型出现假死

2 participants