wallner-avat opened a new issue, #18177:
URL: https://github.com/apache/iotdb/issues/18177

   ### Search before asking
   
   - [x] I searched in the [issues](https://github.com/apache/iotdb/issues) and 
found nothing similar.
   
   
   ### Version
   
     Reproduced on **2.0.8** and current **master** (identical code). Present 
since the tool was introduced (#12325); not addressed by #12435 (launch 
scripts) or #12450 (permission-detection logic).
   
   Environment:
   
     - OS: Windows (reproduces wherever the install path contains a space)
     - IoTDB: 2.0.8 and master
   
   ### Describe the bug and provide the minimal reproduce step
   
     On Windows, if IoTDB is located under a path that contains a space (e.g. 
`C:\Program Files\iotdb`), the health-check tool's *Installation 
Environment(Directory Access)* check splits directory paths at the space. It:
   
     1. **creates a stray empty directory** such as `C:\Program`, and
     2. prints garbled results - e.g. `"C:\Program" has write permission` 
followed by `"Files\...\ext\pipe" has write permission` - instead of one line 
for the real directory.
   
   To reproduce:
   
     1. Unzip/install IoTDB into a path containing a space, e.g. `C:\Program 
Files\iotdb` (or `C:\test dir\iotdb`).
     2. Run `tools\windows\ops\health_check.bat -o local`.
     3. Observe a stray empty `C:\Program` directory, and split/garbled lines 
in the Directory Access section.
   
     Any configured directory under the spaced install path triggers it; the 
`ext/*` dirs (`pipe_lib_dir` / `udf_lib_dir` / `trigger_lib_dir`) hit it by 
default because they resolve to `%IOTDB_HOME%\ext\...`.
   
   Affected file:   `scripts/tools/windows/ops/health_check.bat`, routine 
`:local_dirs_check`.
   
   Root cause:
   
     `:local_dirs_check` joins the directory variables into `spacedirs` with 
**spaces** and iterates with `for %%a in (%spacedirs%)`. The `for ... in (set)` 
form tokenizes on spaces (and `,`/`;`), so a path containing a space is split 
into two
     tokens. The inner `for %%b`/`%%c` loops already preserve spaces for the 
`;`/`,` multi-dir separators via the `"!var:;=" "!"` technique, but the outer 
space-join defeats that. Separately, `%%c` (from `for %%c in ("...")`) still 
carries its
     surrounding quotes, so `mkdir "%%c"` expands to `mkdir ""C:\Program 
Files\...""` - a doubly-quoted path the argument parser re-splits.
   
   
   ### What did you expect to see?
   
     Each configured directory is checked as a single path; no stray directory 
is created; the output has one clean line per directory.
   
   ### What did you see instead?
   
   The tool splits directory paths at the space and creates a stray directory.
   
   ### Anything else?
   
     The docs recommend a space-free install path, but the tool shouldn't 
*create stray directories* or emit corrupt output when that guidance isn't met 
- especially since Windows users frequently install under `C:\Program Files`. A 
minimal fix is
     available (see PR).
   
   ### Are you willing to submit a PR?
   
   - [x] I'm willing to submit a PR!


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to