Skip to content

prevent_win32_max_path_length_error deletes files #95

Open
@MegaIng

Description

@MegaIng

prevent_win32_max_path_length_error silently overwrites files that it shouldn't. This leads to mysterious compilation bugs.

            # Bare module. Module not from library dependency
            if '@s' not in item.name:
                mod_name = item.name.replace('@m', '')

            # Module from a library dependency. Find the package the module
            # belongs to (if any)
            else:
                segments = item.name.replace('@m', '').split('@s')

                for segment in reversed(segments):
                    if is_semver(segment):
                        index = segments.index(segment)
                        mod_name = '@'.join(segments[index:])
                        break

            new_name = ic(f'NIMPORTER@{mod_name}')
            item.replace(item.with_name(new_name))

If the for-loop through the segments doesn't find any semver segment, mod_name is not modified and the same mod_name as the last item is used, leading to the file being silently overwritten.

I would suggested multiple fixes:

  • before the replace, add assert not item.with_name(new_name).exists() to prevent future occurrences of this bug.
  • Add an else branch to the for loop that does the same thing as for "bare" modules, i.e. just remove the @m. This is necessary for local imports which wont include a semver.
  • Update the is_semver function to also detect if a commit hash is added to the semver in the format name-major.minor.patch-hash

Metadata

Metadata

Assignees

Labels

No labels
No labels

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions