Endring i Javascript-pakke med én kodelinje fikk konsekvenser for millioner av prosjekter verden over

Ikke første gang det skjer.

Liten tue kan velte stort lass: Endringer i eksterne avhengigheter har flere ganger skapt store konsekvenser for utviklere verden over.
Liten tue kan velte stort lass: Endringer i eksterne avhengigheter har flere ganger skapt store konsekvenser for utviklere verden over. (Foto: Charles Deluvio on Unsplash)

Ikke første gang det skjer.

De fleste store – og temmelig mange små – kodeprosjekter benytter mange tredjeparts biblioteker som installeres som «avhengigheter». Noe som ofte kan være fornuftig, siden det kan være både tidkrevende og lite produktivt å skulle finne opp hjulet på nytt hver gang. 

Det å ukritisk bruke kode laget av andre kan imidlertid innebære en risiko for at ting slutter å fungere hvis det gjøres endringer i noen av avhengighetene man bruker. I tillegg til at det selvfølgelig også kan være en sikkerhetsrisiko å inkludere et stort antall avhengigheter du ikke vet hvordan fungerer. 

For et par uker siden rapporterte flere brukere om at create-react-app – et populært verktøy for å raskt opprette en grunnleggende React-applikasjon – ikke lenger fungerte. Årsaken viste seg å være en liten endring i et bittelite Javascript-bibliotek med navnet is-promise. Alt is-promise gjør er å utføre en temmelig enkel og grunnleggende sjekk av om et Javascript-objekt er en «promise» og returnere enten true eller false.

I tillegg til create-react-app berørte feilen også en rekke andre store og små prosjekter, som Googles Angular-rammeverk og Firebase-verktøy. Feilen besto i at en ny versjon av is-promise ikke benyttet ES modules på riktig måte – slik at utviklere ikke fikk bygget nye versjoner av sine prosjekter når is-promise skulle importeres. Eksisterende prosjekter som benyttet is-promise feilet med andre ord ikke, men feilen lagde likevel problemer for mange utviklere. 

ZDNet skriver at selv om is-promise består av få linjer med kode, er det en av de mest populære pakkene som installeres via pakkehåndteringssystemet npm. Ifølge Github brukes is-promise av mer enn 3,4 millioner prosjekter og brukes som avhengighet i 766 andre Javascript-biblioteker. 

Ikke første gang – noen som husker «left-pad»?

Is-promise-biblioteket er så lite at det knapt kan kalles et bibliotek. Hele sjekken gjøres i praksis av kun én kodelinje, som man strengt tatt ikke skal ha veldig omfattende Javascript-kunnskap for å klare å implementere selv. Og klarer man det ikke selv, har is-promise MIT-lisens. Det betyr at du i praksis kan gjøre hva du vil med koden – som for eksempel å legge den inn i din egen kodebase i stedet for å dra den inn som en ekstern avhengighet.

Dette er hele koden, for de som måtte være nysgjerrige:

module.exports = isPromise;
module.exports.default = isPromise;

function isPromise(obj) {
  return !!obj && (typeof obj === 'object' || typeof obj === 'function') && typeof obj.then === 'function';
}


Dette er ikke første gang endringer i svært enkle tredjeparts Javascript-biblioteker lager krøll for et stort antall utviklere verden over. I 2016 bestemte utvikleren av Javascript-biblioteket left-pad seg for å av-publisere biblioteket fra npm – uten forvarsel. Det gjorde at tusenvis av Javascript-prosjekter verden over plutselig sluttet å fungere. 

Også left-pad var et svært enkelt bibliotek, med kun 17 kodelinjer. Alt det gjorde, var å legge til tallet null eller mellomrom før en tekststreng. Dette kan i dag gjøres enkelt med streng-metoden padStart().

Les også

Kommentarer (16)

Kommentarer (16)
Til toppen