Kaynağa Gözat

Merge pull request #33504 from overleaf/bg-upgrade-yauzl

Upgrade yauzl library in web to version 3.3.0

GitOrigin-RevId: 82b4158db7a432f4257bd48402840f07801c6d07
Brian Gough 3 ay önce
ebeveyn
işleme
3940f8c2a7

+ 1 - 1
services/web/app/src/Features/Uploads/ArchiveManager.mjs

@@ -138,7 +138,7 @@ function _extractZipFiles(source, destination) {
                 destFile,
               })
               zipfile.close() // bail out, stop reading file entries
-              done(err)
+              done(new InvalidZipFileError().withCause(err))
             } else {
               entryFileCount++
               zipfile.readEntry() // continue to the next file

+ 1 - 1
services/web/package.json

@@ -191,7 +191,7 @@
     "xml-crypto": "^2.1.6",
     "xml2js": "^0.6.2",
     "xregexp": "^4.3.0",
-    "yauzl": "^2.10.0",
+    "yauzl": "^3.3.0",
     "zod": "^4.0.17",
     "zod-validation-error": "^4.0.1"
   },

BIN
services/web/test/acceptance/files/test_project_with_too_long_filename.zip


+ 18 - 0
services/web/test/acceptance/src/ProjectStructureTests.mjs

@@ -250,6 +250,24 @@ describe('ProjectStructureChanges', function () {
     })
   })
 
+  describe('uploading a project containing a filename that is too long', function () {
+    let res
+
+    beforeEach(async function () {
+      const { response } = await uploadExampleProject(
+        owner,
+        'test_project_with_too_long_filename.zip',
+        { allowBadStatus: true }
+      )
+
+      res = response
+    })
+
+    it('should fail with 422 error', function () {
+      expect(res.statusCode).to.equal(422)
+    })
+  })
+
   describe('deleting folders', function () {
     beforeEach(async function () {
       const { projectId } = await createExampleProject(owner)

+ 3 - 3
services/web/test/unit/src/Uploads/ArchiveManager.test.mjs

@@ -374,7 +374,7 @@ describe('ArchiveManager', function () {
       it('should reject with an error', function (ctx) {
         expect(ctx.error)
           .to.be.instanceOf(Error)
-          .and.have.property('message', 'Something went wrong')
+          .and.have.property('message', 'invalid_zip_file')
       })
 
       it('should close the zipfile', function (ctx) {
@@ -411,7 +411,7 @@ describe('ArchiveManager', function () {
       it('should reject with an error', function (ctx) {
         expect(ctx.error)
           .to.be.instanceOf(Error)
-          .and.have.property('message', 'Something went wrong')
+          .and.have.property('message', 'invalid_zip_file')
       })
 
       it('should close the zipfile', function (ctx) {
@@ -449,7 +449,7 @@ describe('ArchiveManager', function () {
       it('should reject with an error', function (ctx) {
         expect(ctx.error)
           .to.be.instanceOf(Error)
-          .and.have.property('message', 'Something went wrong')
+          .and.have.property('message', 'invalid_zip_file')
       })
       it('should destroy the readstream', function (ctx) {
         ctx.readStream.destroy.called.should.equal(true)

+ 11 - 1
yarn.lock

@@ -7570,7 +7570,7 @@ __metadata:
     xml-crypto: "npm:^2.1.6"
     xml2js: "npm:^0.6.2"
     xregexp: "npm:^4.3.0"
-    yauzl: "npm:^2.10.0"
+    yauzl: "npm:^3.3.0"
     yup: "npm:^0.32.11"
     zod: "npm:^4.0.17"
     zod-validation-error: "npm:^4.0.1"
@@ -34926,6 +34926,16 @@ __metadata:
   languageName: node
   linkType: hard
 
+"yauzl@npm:^3.3.0":
+  version: 3.3.0
+  resolution: "yauzl@npm:3.3.0"
+  dependencies:
+    buffer-crc32: "npm:~0.2.3"
+    pend: "npm:~1.2.0"
+  checksum: 10c0/935e32054171104bdf8a4091180f61b5698d8b90ee64552bb643c2176f815d4215d0764e3f41e0d9a1e4525b37602bf145ec5fd39dd014f0be7290851ce3acce
+  languageName: node
+  linkType: hard
+
 "yn@npm:^3.1.1":
   version: 3.1.1
   resolution: "yn@npm:3.1.1"