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

Allow slashes in export filename #6265

Merged
merged 2 commits into from
Jun 8, 2023

Conversation

klakhov
Copy link
Contributor

@klakhov klakhov commented Jun 7, 2023

Motivation and context

How has this been tested?

Checklist

  • I submit my changes into the develop branch
  • I have added a description of my changes into the CHANGELOG file
  • I have updated the documentation accordingly
  • I have added tests to cover my changes
  • I have linked related issues (see GitHub docs)
  • I have increased versions of npm packages if it is necessary
    (cvat-canvas,
    cvat-core,
    cvat-data and
    cvat-ui)

License

  • I submit my code changes under the same MIT License that covers the project.
    Feel free to contact the maintainers if that's a concern.

@klakhov klakhov requested review from bsekachev and mdacoca as code owners June 7, 2023 13:43
@bsekachev
Copy link
Member

bsekachev commented Jun 7, 2023

What if task name contains something like test task /../../.. or /root/?)

@klakhov
Copy link
Contributor Author

klakhov commented Jun 8, 2023

If custom_name contains slashes sendfile from django replaces them with _, so everything is ok with local downloads.
But we need to check cloud storages.

@bsekachev
Copy link
Member

@klakhov

The question not about sendfile, the question is about CVAT internal filesystem. Because before sendfile works, the file initially created within CVAT container.

@bsekachev bsekachev merged commit 7fa1925 into develop Jun 8, 2023
@bsekachev bsekachev deleted the kl/allow-slashes-in-export-filename branch June 8, 2023 17:19
@klakhov
Copy link
Contributor Author

klakhov commented Jun 9, 2023

File initially created within CVAT container has nothing to do with filename provided by user.
cvat/apps/dataset_manager/views.py:

        cache_dir = get_export_cache_dir(db_instance)

        exporter = EXPORT_FORMATS[dst_format]
        output_base = '%s_%s' % ('dataset' if save_images else 'annotations',
            make_file_name(to_snake_case(dst_format)))
        output_path = '%s.%s' % (output_base, exporter.EXT)
        output_path = osp.join(cache_dir, output_path)

It is only used as final filename which is provided to user (attachment_filename)

  • In case of LOCAL export, Django sendfile validates path and replaces all / with _
  • In case of CLOUD_STORAGE export, if path is correct cat/dog/archive.zip, feature works as expected. Using relative paths seems to be prohibited. If path contains ../../, there will be an error. For example:
boto3.exceptions.S3UploadFailedError: Failed to upload /home/kirill/projects/cvat/data/tasks/12/export_cache/task_backup.zip to tmp/car/dog/../a.zip: An error occurred (XMinioInvalidResourceName) when calling the PutObject operation: Resource name contains bad components such as ".." or ".".

@azhavoro azhavoro mentioned this pull request Jun 9, 2023
bsekachev pushed a commit that referenced this pull request Jun 13, 2023
<!-- Raise an issue to propose your change
(https://github.com/opencv/cvat/issues).
It helps to avoid duplication of efforts from multiple independent
contributors.
Discuss your ideas with maintainers to be sure that changes will be
approved and merged.
Read the [Contribution
guide](https://opencv.github.io/cvat/docs/contributing/). -->

<!-- Provide a general summary of your changes in the Title above -->

### Motivation and context
<!-- Why is this change required? What problem does it solve? If it
fixes an open
issue, please link to the issue here. Describe your changes in detail,
add
screenshots. -->
Test for #6265 

### How has this been tested?
<!-- Please describe in detail how you tested your changes.
Include details of your testing environment, and the tests you ran to
see how your change affects other areas of the code, etc. -->

### Checklist
<!-- Go over all the following points, and put an `x` in all the boxes
that apply.
If an item isn't applicable for some reason, then ~~explicitly
strikethrough~~ the whole
line. If you don't do that, GitHub will show incorrect progress for the
pull request.
If you're unsure about any of these, don't hesitate to ask. We're here
to help! -->
- [ ] I submit my changes into the `develop` branch
- [ ] I have added a description of my changes into the
[CHANGELOG](https://github.com/opencv/cvat/blob/develop/CHANGELOG.md)
file
- [ ] I have updated the documentation accordingly
- [ ] I have added tests to cover my changes
- [ ] I have linked related issues (see [GitHub docs](

https://help.github.com/en/github/managing-your-work-on-github/linking-a-pull-request-to-an-issue#linking-a-pull-request-to-an-issue-using-a-keyword))
- [ ] I have increased versions of npm packages if it is necessary

([cvat-canvas](https://github.com/opencv/cvat/tree/develop/cvat-canvas#versioning),

[cvat-core](https://github.com/opencv/cvat/tree/develop/cvat-core#versioning),

[cvat-data](https://github.com/opencv/cvat/tree/develop/cvat-data#versioning)
and

[cvat-ui](https://github.com/opencv/cvat/tree/develop/cvat-ui#versioning))

### License

- [ ] I submit _my code changes_ under the same [MIT License](
https://github.com/opencv/cvat/blob/develop/LICENSE) that covers the
project.
  Feel free to contact the maintainers if that's a concern.
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.

2 participants