Repository navigation
fix: 서버와 규칙 테스트의 npm 의존성을 패치한다 - #228
Merged
Merged
Conversation
functions 는 uuid 를 11.1.1 로 고정한다. 트리의 소비자(firebase-admin·gaxios· google-gax·teeny-request)가 모두 v4 만 부르고, uuid 12.0.0 이 CommonJS 를 빼서 11.x 가 이 트리에서 쓸 수 있는 마지막 패치 판이다(GHSA-w5hq-g745-h8pq). firestore-tests 는 qs 6.16.0, csv-parse 7.0.2, @opentelemetry/core 2.8.0 과 gaxios 밑 uuid 11.1.1 을 고정한다. firebase-tools 는 csv-parse 의 parse() 를 옵션 없이 CommonJS 로 부르기만 하므로 6.0.0 이 바꾼 옵션·오류 코드 이름과 무관하다. OpenTelemetry 2.x 강제는 firebase-tools 자신의 overrides 와 같다. 남은 권고 둘은 실행을 깨지 않고 올릴 수 있는 판이 없다. - ts-deepmerge(GHSA-87mf-gv2c-c62c): 패치는 8.0.0 뿐인데 default export 가 빠졌고 firebase-functions-test 는 그 default 를 부른다. 최신 3.5.0 도 여전히 ts-deepmerge ^2.0.1 을 적는다. - stream-json(GHSA-528h-pc64-c93x): 패치 3.5.0 은 ESM 전용이고 exports 맵이 firebase-tools 의 깊은 CommonJS 경로(stream-json/filters/Pick 등)를 풀지 못한다. firebase-tools 15.30.0 도 아직 ^1.7.3 이다. 검증은 두 디렉터리 clean install 후 functions lint·handler 테스트와 로컬 Firestore 에뮬레이터 규칙 테스트를 Node 22·25 양쪽에서 돌렸다. npm audit 는 각각 10건에서 위 2건으로 줄었다.
firebase-functions-test 는 이 저장소에서 부르는 곳이 없다. 남겨 두면 패치 판이 없는 ts-deepmerge(GHSA-87mf-gv2c-c62c)만 딸려 오므로 devDependencies 에서 뺐다. functions 의 npm audit 은 0건이 됐다. 규칙 테스트 쪽 가드는 모듈을 루트가 아니라 소비하는 패키지의 자리에서 고르게 바꿨다. csv-parse·pubsub 은 firebase-tools, uuid 는 gaxios, qs 는 express 의 require 문맥이다. 전에는 호이스팅된 루트 사본만 봐서 소비자 밑에 중첩된 취약 사본이 가려졌다. gaxios/node_modules/uuid 에 9.0.1 을 심어 두면 루트가 11.1.1 이어도 uuid 가드가 실패하는 것을 확인했다.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
📌𝘐𝘴𝘴𝘶𝘦𝘴
남은 stream-json 호환 패치는 #230에서 추적합니다.
📎𝘞𝘰𝘳𝘬 𝘋𝘦𝘴𝘤𝘳𝘪𝘱𝘵𝘪𝘰𝘯
functions
uuid를 11.1.1 로 고정했다. 이 트리의 uuid 소비자는 firebase-admin(eventarc-utils), gaxios, google-gax, teeny-request 뿐이고 넷 다v4만 부른다. uuid 12.0.0 이 CommonJS 를 없앴으므로(CHANGELOG) CommonJS 로 도는 이 트리에서 올릴 수 있는 마지막 패치 판이 11.1.1 이다. 권고는 GHSA-w5hq-g745-h8pq(CVE-2026-41907, v3/v5/v6 이 외부 버퍼 경계를 검사하지 않는 문제).qs6.16.0 고정은 그대로 두었다(fix: 공유 일정 서버 알림의 삭제와 전송 경계를 검증한다 #195).firebase-functions-test를 devDependencies 에서 뺐다. 저장소 안에서 부르는 코드가 없고(참조는functions/package.json한 줄뿐이었다), 남겨 두면 패치 판이 없는 ts-deepmerge(GHSA-87mf-gv2c-c62c)만 딸려 온다. 패치는 8.0.0 뿐인데 v8 의 CommonJS 진입점은merge만 내보내고 default export 가 없어서, firebase-functions-test 가lib/cloudevent/generate.js:51에서 부르는default가 사라진다. 최신 3.5.0 도 여전히ts-deepmerge ^2.0.1이다. 함수 코드와 테스트는 그대로다.firestore-tests
csv-parse7.0.2 — GHSA-8cw4-87c7-c6xx. firebase-tools 는commands/auth-import.js에서require("csv-parse")의parse()를 옵션 없이 한 번 부르는 게 전부라, 6.0.0 이 바꾼 옵션 이름(relax→relax_quotes등)·오류 코드 이름·csv-parse/lib/sync경로 변경에 걸리지 않는다. 7.0.0 은 저자 표기대로 breaking change 없는 실수 배포다.qs6.16.0 — GHSA-x5fp-wj9c-mxmx, GHSA-4mjr-xmp4-gh2g. 에뮬레이터 허브가 얹혀 있는 express 4.22.2 경로이고, functions 쪽에서 이미 같은 판으로 돈다.@opentelemetry/core2.8.0 — GHSA-8988-4f7v-96qf.@google-cloud/pubsub5.3.1 이^1.30.1을 적지만, firebase-tools 15.29.0 자신의overrides가@opentelemetry/core: ^2.8.0을 박아 둔다. 같은 조합을 따랐고 모듈 적재를 테스트로 잠갔다.gaxios밑의uuid11.1.1 — functions 와 같은 권고다. 전역이 아니라 gaxios 범위로 좁혀, 이미 패치 판(14.0.2)을 쓰는 universal-analytics 를 끌어내리지 않게 했다.firebase-tools는 15.29.0 그대로다. 15.30.0 도csv-parse ^5.0.4,stream-json ^1.7.3,gaxios ^6.7.0이라 이 권고들과 무관하다.회귀 가드
functions/test/runtime.test.cjs에 uuid 버퍼 경계와 CommonJSv4두 건을 더했다.firestore-tests/tooling.test.mjs를 새로 뒀다(csv-parse 진입점, qs 배열 한도, uuid 버퍼 경계, pubsub 적재). 모듈은 루트가 아니라 소비하는 패키지의 require 문맥에서 고른다(csv-parse·pubsub 은 firebase-tools, uuid 는 gaxios, qs 는 express). 호이스팅된 루트 사본만 보면 소비자 밑에 중첩된 취약 사본이 가려지기 때문이고,node_modules/gaxios/node_modules/uuid에 9.0.1 을 심어 두면 루트가 11.1.1 이어도 uuid 가드가 실제로 실패하는 것을 확인했다.남은 권고 하나
stream-jsonGHSA-528h-pc64-c93x (firestore-tests, dev 전용)는 실행을 깨지 않고 올릴 판이 없다. 패치 3.5.0 은 ESM 전용이고 exports 맵이"./*": "./src/*"라 firebase-tools 가 쓰는 깊은 CommonJS 경로(stream-json/filters/Pick,streamers/StreamArray,filters/Filter,streamers/StreamObject)가 풀리지 않는다. 실제로 요구해 보면MODULE_NOT_FOUND이고, 1.x·2.x 에는 패치가 없다. 해제 조건은 firebase-tools 가 stream-json 3.5 이상으로 올라오는 것이며 15.30.0 까지는 아직^1.7.3이다.📷𝘚𝘤𝘳𝘦𝘦𝘯𝘴𝘩𝘰𝘵
UI 변경이 없다.
💬𝘛𝘰 𝘙𝘦𝘷𝘪𝘦𝘸𝘦𝘳𝘴
functions:npm ci --ignore-scripts→npm run lint(0건) →npm test(4/4) →node --test .github/scripts/functions-notification.test.mjs(11/11).firestore-tests:npm ci→npm test(로컬 Firestore 에뮬레이터, 규칙·트랜잭션·도구 가드 66/66). CI 와 같은 Node 22.23.2 와 로컬 Node 25.6.1 양쪽에서 같은 결과다.npm audit:functions10건 → 0건,firestore-tests10건 → 2건(stream-json 과 그것을 무는 firebase-tools). Dependabot 경보 기준으로는 fix: 의존성 그래프 제출이 병렬 설정에서 간헐적으로 깨진다 #67, refactor: MainViewModel 을 화면별 MVI ViewModel 로 분해하고 일정을 Firestore 리스너로 받는다 #58, chore: Firestore 오프라인 캐시 설정을 setLocalCacheSettings 로 옮긴다 #71 이 닫히고 chore: lint 경고 정리 (템플릿 색상·web_client_id 미사용 리소스, POST_NOTIFICATIONS InlinedApi) #66 이 남는다. 경보를 dismiss 하거나 감사 워크플로를 손대지 않았다.