Skip to content

fix: guard os.Args access for wasm which panics when building#4762

Merged
gqcn merged 2 commits into
masterfrom
fix/gdebug-panic-in-wasm
Apr 22, 2026
Merged

fix: guard os.Args access for wasm which panics when building#4762
gqcn merged 2 commits into
masterfrom
fix/gdebug-panic-in-wasm

Conversation

@gqcn

@gqcn gqcn commented Apr 22, 2026

Copy link
Copy Markdown
Member

This pull request improves the reliability and safety of server restart and reload operations by ensuring the correct retrieval of the current executable path and process arguments. It replaces direct usage of os.Args[0] with a more robust approach using gfile.SelfPath(), and adds error handling for cases where the executable path cannot be determined. Additionally, it introduces a helper function to safely obtain process arguments, and removes an unnecessary import.

Executable Path Handling and Error Checking:

  • Replaced usage of os.Args[0] with gfile.SelfPath() throughout the server admin and process management code to reliably determine the current executable path; added checks and error responses when the path cannot be determined. [1] [2] [3]
  • Added early returns in initialization functions if os.Args is empty, preventing potential panics or misbehavior when the argument list is missing. [1] [2]

Process Argument Handling:

  • Introduced the getCurrentProcessArgs() helper function to safely return process arguments (excluding the program name), ensuring correct behavior even if no arguments are provided. Updated process creation calls to use this helper.

Code Cleanup:

  • Removed an unused import of the os package from ghttp_server_admin.go.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Note

Copilot was unable to run its full agentic suite in this review.

This PR aims to prevent panics (notably on wasm) and make server restart/reload logic safer by avoiding direct os.Args[0] access and introducing guards/error handling when the executable path/args can’t be determined.

Changes:

  • Guarded os.Args access in init paths to avoid panics when os.Args is empty.
  • Switched restart/reload process spawning to use gfile.SelfPath() plus explicit empty-path error handling.
  • Added a helper to safely derive current process args (getCurrentProcessArgs) and removed an unnecessary import.

Reviewed changes

Copilot reviewed 4 out of 4 changed files in this pull request and generated 4 comments.

File Description
os/gfile/gfile.go Adds os.Args length guard before deriving selfPath.
net/ghttp/ghttp_server_admin_process.go Uses gfile.SelfPath() + helper args for restart/reload processes; adds empty-path errors.
net/ghttp/ghttp_server_admin.go Uses gfile.SelfPath() for admin restart path; removes os import.
debug/gdebug/gdebug_caller.go Adds os.Args length guard before deriving selfPath.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread os/gfile/gfile.go
Comment thread debug/gdebug/gdebug_caller.go
Comment thread net/ghttp/ghttp_server_admin_process.go Outdated
Comment thread net/ghttp/ghttp_server_admin.go
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Copilot AI review requested due to automatic review settings April 22, 2026 12:08

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 4 out of 4 changed files in this pull request and generated 2 comments.


💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread net/ghttp/ghttp_server_admin_process.go
Comment thread net/ghttp/ghttp_server_admin_process.go
@gqcn gqcn merged commit cb7cfa5 into master Apr 22, 2026
36 checks passed
@gqcn gqcn deleted the fix/gdebug-panic-in-wasm branch April 22, 2026 12:44
github-actions Bot added a commit to lingcoder/gf that referenced this pull request May 18, 2026
)

This pull request improves the reliability and safety of server restart
and reload operations by ensuring the correct retrieval of the current
executable path and process arguments. It replaces direct usage of
`os.Args[0]` with a more robust approach using `gfile.SelfPath()`, and
adds error handling for cases where the executable path cannot be
determined. Additionally, it introduces a helper function to safely
obtain process arguments, and removes an unnecessary import.

**Executable Path Handling and Error Checking:**

- Replaced usage of `os.Args[0]` with `gfile.SelfPath()` throughout the
server admin and process management code to reliably determine the
current executable path; added checks and error responses when the path
cannot be determined.
[[1]](diffhunk://#diff-0d174b149c56c4aa7ffeba2be94d16dc1b8000933f1f2a2e6bf011acdad3272fL122-R134)
[[2]](diffhunk://#diff-0d174b149c56c4aa7ffeba2be94d16dc1b8000933f1f2a2e6bf011acdad3272fL168-R184)
[[3]](diffhunk://#diff-3b4265be7ef0335b832dacfc2fc7ddc0f9dfae5b81340ff57d2b6a526c60d9e1L62-R65)
- Added early returns in initialization functions if `os.Args` is empty,
preventing potential panics or misbehavior when the argument list is
missing.
[[1]](diffhunk://#diff-0aa99f033274ea60b9c466ae4fc98d0816ec13781d8ec787fb3ef106a49a79ecR35-R37)
[[2]](diffhunk://#diff-5782fa47aa858b8e8358fd50353b050ee30418b7844b36e313e9c6d01188c092R47-R49)

**Process Argument Handling:**

- Introduced the `getCurrentProcessArgs()` helper function to safely
return process arguments (excluding the program name), ensuring correct
behavior even if no arguments are provided. Updated process creation
calls to use this helper.

**Code Cleanup:**

- Removed an unused import of the `os` package from
`ghttp_server_admin.go`.

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
StrangeYear pushed a commit to StrangeYear/gf that referenced this pull request Jun 2, 2026
)

This pull request improves the reliability and safety of server restart
and reload operations by ensuring the correct retrieval of the current
executable path and process arguments. It replaces direct usage of
`os.Args[0]` with a more robust approach using `gfile.SelfPath()`, and
adds error handling for cases where the executable path cannot be
determined. Additionally, it introduces a helper function to safely
obtain process arguments, and removes an unnecessary import.

**Executable Path Handling and Error Checking:**

- Replaced usage of `os.Args[0]` with `gfile.SelfPath()` throughout the
server admin and process management code to reliably determine the
current executable path; added checks and error responses when the path
cannot be determined.
[[1]](diffhunk://#diff-0d174b149c56c4aa7ffeba2be94d16dc1b8000933f1f2a2e6bf011acdad3272fL122-R134)
[[2]](diffhunk://#diff-0d174b149c56c4aa7ffeba2be94d16dc1b8000933f1f2a2e6bf011acdad3272fL168-R184)
[[3]](diffhunk://#diff-3b4265be7ef0335b832dacfc2fc7ddc0f9dfae5b81340ff57d2b6a526c60d9e1L62-R65)
- Added early returns in initialization functions if `os.Args` is empty,
preventing potential panics or misbehavior when the argument list is
missing.
[[1]](diffhunk://#diff-0aa99f033274ea60b9c466ae4fc98d0816ec13781d8ec787fb3ef106a49a79ecR35-R37)
[[2]](diffhunk://#diff-5782fa47aa858b8e8358fd50353b050ee30418b7844b36e313e9c6d01188c092R47-R49)

**Process Argument Handling:**

- Introduced the `getCurrentProcessArgs()` helper function to safely
return process arguments (excluding the program name), ensuring correct
behavior even if no arguments are provided. Updated process creation
calls to use this helper.

**Code Cleanup:**

- Removed an unused import of the `os` package from
`ghttp_server_admin.go`.

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
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.

3 participants