Skip to content

fix: CopySource needs to be encoded#210

Merged
kptdobe merged 5 commits into
mainfrom
copyenc
Dec 3, 2025
Merged

fix: CopySource needs to be encoded#210
kptdobe merged 5 commits into
mainfrom
copyenc

Conversation

@kptdobe

@kptdobe kptdobe commented Dec 3, 2025

Copy link
Copy Markdown
Contributor

Customer reported they cannot delete some folders, even though they are empty.

Root cause analysis:

  1. even if they appear empty, they still contain hidden folders with images of the deleted documents (would be great to delete them too - but different story)
  2. some of those images have name like boost%20saver_img1.jpg or icon=gift-box,%20style=two-toned.svg
  3. when running the copy, the command fails with a "not found": the command requires CopySource to be encoded

@kptdobe
kptdobe requested a review from tripodsan December 3, 2025 10:45
Comment thread src/storage/object/copy.js Outdated
Comment thread src/storage/object/copy.js Outdated
Comment thread src/storage/object/copy.js
@codecov

codecov Bot commented Dec 3, 2025

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@kptdobe

kptdobe commented Dec 3, 2025

Copy link
Copy Markdown
Contributor Author

@tripodsan As usual, you were right, encodeURI was enough... I triple checked, only the %20 was causing an issue. I simplified the code.

@kptdobe
kptdobe merged commit 1ab3fc8 into main Dec 3, 2025
5 checks passed
@kptdobe
kptdobe deleted the copyenc branch December 3, 2025 13:33
adobe-bot pushed a commit that referenced this pull request Dec 4, 2025
# 1.0.0 (2025-12-04)

### Bug Fixes

* add IMS offline token validation ([#109](#109)) ([ba7f961](ba7f961))
* add more tests for getObject ([#148](#148)) ([7055d3c](7055d3c))
* add semantic release ([#213](#213)) ([86b608d](86b608d))
* build ([51c6255](51c6255))
* consistently use 'syncadmin' (no intercaps) ([#198](#198)) ([3197624](3197624))
* CopySource needs to be encoded ([#210](#210)) ([1ab3fc8](1ab3fc8))
* do not respond a 404 on error ([#184](#184)) ([b1d10c8](b1d10c8))
* error when copying a file that exists ([#185](#185)) ([7215387](7215387))
* get handler returns undefined ([#168](#168)) ([aa55ce5](aa55ce5))
* last modified header for source ([#145](#145)) ([edf1de1](edf1de1))
* non-https links in docs ([#190](#190)) ([661db82](661db82))
* only invalidate collab for html documents ([#167](#167)) ([71e6a1c](71e6a1c)), closes [#166](#166)
* persist creds ([d5dfed1](d5dfed1))
* pin s3 client version due to problems with DOMParser ([#201](#201)) ([1f93628](1f93628))
* preserve content type when copying ([#182](#182)) ([4e83525](4e83525))
* put/post to source responds with hlx.page / hlx.live ([#209](#209)) ([0415ef4](0415ef4))
* versioning timestamp for version and document itself ([#144](#144)) ([a384662](a384662))
* **versionsource:** "delegate" permission check to api ([#179](#179)) ([04b17f2](04b17f2))
* when catching exceptions don't rely on $metadata being set ([#170](#170)) ([5e121f0](5e121f0)), closes [#169](#169)

### Features

* add a restore point if body is empty ([#173](#173)) ([65cbf32](65cbf32))
* add HTTP conditional request support (If-Match, If-None-Match) ([#187](#187)) ([190afd8](190afd8))
* do not create a version for binaries ([#211](#211)) ([92ea28a](92ea28a))
* handle bad requests ([#204](#204)) ([5ae63c5](5ae63c5))
* handle bad requests ([#214](#214)) ([be0dc49](be0dc49)), closes [#204](#204) [#212](#212)
* no version for binaries ([dd98406](dd98406))
* preserve content type in versions ([#177](#177)) ([5182cd5](5182cd5))
* return last modified for source based on timestamp ([#142](#142)) ([2b3454b](2b3454b))
* send shared secret to collab ([#202](#202)) ([6636423](6636423))

### Reverts

* Revert "feat: handle bad requests ([#204](#204))" ([#212](#212)) ([306fcb5](306fcb5))
* Revert "Fine grained access control ([#108](#108))" ([#118](#118)) ([68918ca](68918ca))
* Revert "fix: last modified header for source ([#145](#145))" ([#147](#147)) ([20b1a61](20b1a61))
* Revert "fix: versioning timestamp for version and document itself ([#144](#144))" ([#146](#146)) ([f626da7](f626da7))
* Revert "Revert "fix: last modified header for source"" ([#149](#149)) ([767629c](767629c)), closes [#145](#145) [#147](#147)
adobe-bot pushed a commit that referenced this pull request Dec 4, 2025
# 1.0.0 (2025-12-04)

### Bug Fixes

* add IMS offline token validation ([#109](#109)) ([ba7f961](ba7f961))
* add more tests for getObject ([#148](#148)) ([7055d3c](7055d3c))
* add semantic release ([#213](#213)) ([86b608d](86b608d))
* build ([51c6255](51c6255))
* consistently use 'syncadmin' (no intercaps) ([#198](#198)) ([3197624](3197624))
* CopySource needs to be encoded ([#210](#210)) ([1ab3fc8](1ab3fc8))
* do not respond a 404 on error ([#184](#184)) ([b1d10c8](b1d10c8))
* error when copying a file that exists ([#185](#185)) ([7215387](7215387))
* get handler returns undefined ([#168](#168)) ([aa55ce5](aa55ce5))
* last modified header for source ([#145](#145)) ([edf1de1](edf1de1))
* non-https links in docs ([#190](#190)) ([661db82](661db82))
* only invalidate collab for html documents ([#167](#167)) ([71e6a1c](71e6a1c)), closes [#166](#166)
* persist creds ([d5dfed1](d5dfed1))
* pin s3 client version due to problems with DOMParser ([#201](#201)) ([1f93628](1f93628))
* preserve content type when copying ([#182](#182)) ([4e83525](4e83525))
* put/post to source responds with hlx.page / hlx.live ([#209](#209)) ([0415ef4](0415ef4))
* versioning timestamp for version and document itself ([#144](#144)) ([a384662](a384662))
* **versionsource:** "delegate" permission check to api ([#179](#179)) ([04b17f2](04b17f2))
* when catching exceptions don't rely on $metadata being set ([#170](#170)) ([5e121f0](5e121f0)), closes [#169](#169)

### Features

* add a restore point if body is empty ([#173](#173)) ([65cbf32](65cbf32))
* add HTTP conditional request support (If-Match, If-None-Match) ([#187](#187)) ([190afd8](190afd8))
* do not create a version for binaries ([#211](#211)) ([92ea28a](92ea28a))
* handle bad requests ([#204](#204)) ([5ae63c5](5ae63c5))
* handle bad requests ([#214](#214)) ([be0dc49](be0dc49)), closes [#204](#204) [#212](#212)
* no version for binaries ([dd98406](dd98406))
* preserve content type in versions ([#177](#177)) ([5182cd5](5182cd5))
* return last modified for source based on timestamp ([#142](#142)) ([2b3454b](2b3454b))
* send shared secret to collab ([#202](#202)) ([6636423](6636423))

### Reverts

* Revert "feat: handle bad requests ([#204](#204))" ([#212](#212)) ([306fcb5](306fcb5))
* Revert "Fine grained access control ([#108](#108))" ([#118](#118)) ([68918ca](68918ca))
* Revert "fix: last modified header for source ([#145](#145))" ([#147](#147)) ([20b1a61](20b1a61))
* Revert "fix: versioning timestamp for version and document itself ([#144](#144))" ([#146](#146)) ([f626da7](f626da7))
* Revert "Revert "fix: last modified header for source"" ([#149](#149)) ([767629c](767629c)), closes [#145](#145) [#147](#147)
adobe-bot pushed a commit that referenced this pull request Dec 4, 2025
# 1.0.0 (2025-12-04)

### Bug Fixes

* add IMS offline token validation ([#109](#109)) ([ba7f961](ba7f961))
* add more tests for getObject ([#148](#148)) ([7055d3c](7055d3c))
* add semantic release ([#213](#213)) ([86b608d](86b608d))
* build ([51c6255](51c6255))
* consistently use 'syncadmin' (no intercaps) ([#198](#198)) ([3197624](3197624))
* CopySource needs to be encoded ([#210](#210)) ([1ab3fc8](1ab3fc8))
* do not respond a 404 on error ([#184](#184)) ([b1d10c8](b1d10c8))
* error when copying a file that exists ([#185](#185)) ([7215387](7215387))
* get handler returns undefined ([#168](#168)) ([aa55ce5](aa55ce5))
* last modified header for source ([#145](#145)) ([edf1de1](edf1de1))
* non-https links in docs ([#190](#190)) ([661db82](661db82))
* only invalidate collab for html documents ([#167](#167)) ([71e6a1c](71e6a1c)), closes [#166](#166)
* persist creds ([d5dfed1](d5dfed1))
* pin s3 client version due to problems with DOMParser ([#201](#201)) ([1f93628](1f93628))
* preserve content type when copying ([#182](#182)) ([4e83525](4e83525))
* put/post to source responds with hlx.page / hlx.live ([#209](#209)) ([0415ef4](0415ef4))
* trigger release ([3c35bb4](3c35bb4))
* versioning timestamp for version and document itself ([#144](#144)) ([a384662](a384662))
* **versionsource:** "delegate" permission check to api ([#179](#179)) ([04b17f2](04b17f2))
* when catching exceptions don't rely on $metadata being set ([#170](#170)) ([5e121f0](5e121f0)), closes [#169](#169)

### Features

* add a restore point if body is empty ([#173](#173)) ([65cbf32](65cbf32))
* add HTTP conditional request support (If-Match, If-None-Match) ([#187](#187)) ([190afd8](190afd8))
* do not create a version for binaries ([#211](#211)) ([92ea28a](92ea28a))
* handle bad requests ([#204](#204)) ([5ae63c5](5ae63c5))
* handle bad requests ([#214](#214)) ([be0dc49](be0dc49)), closes [#204](#204) [#212](#212)
* no version for binaries ([dd98406](dd98406))
* preserve content type in versions ([#177](#177)) ([5182cd5](5182cd5))
* return last modified for source based on timestamp ([#142](#142)) ([2b3454b](2b3454b))
* send shared secret to collab ([#202](#202)) ([6636423](6636423))

### Reverts

* Revert "feat: handle bad requests ([#204](#204))" ([#212](#212)) ([306fcb5](306fcb5))
* Revert "Fine grained access control ([#108](#108))" ([#118](#118)) ([68918ca](68918ca))
* Revert "fix: last modified header for source ([#145](#145))" ([#147](#147)) ([20b1a61](20b1a61))
* Revert "fix: versioning timestamp for version and document itself ([#144](#144))" ([#146](#146)) ([f626da7](f626da7))
* Revert "Revert "fix: last modified header for source"" ([#149](#149)) ([767629c](767629c)), closes [#145](#145) [#147](#147)
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