diff --git a/src/atrules/atrules.js b/src/atrules/atrules.js index 3f529c4..8ed71a0 100644 --- a/src/atrules/atrules.js +++ b/src/atrules/atrules.js @@ -69,7 +69,7 @@ export function isMediaBrowserhack(prelude) { return this.break } } else if (node.type === MediaFeature) { - if (value !== null && value.unit === '\\0') { + if (value && value.unit && value.unit === '\\0') { returnValue = true return this.break } @@ -81,15 +81,14 @@ export function isMediaBrowserhack(prelude) { return this.break } else if (strEquals('min-resolution', name) - && strEquals('.001', value.value) + && value && strEquals('.001', value.value) && strEquals('dpcm', value.unit) ) { returnValue = true return this.break } else if (strEquals('-webkit-min-device-pixel-ratio', name)) { - let val = value.value - if ((strEquals('0', val) || strEquals('10000', val))) { + if (value && value.value && (strEquals('0', value.value) || strEquals('10000', value.value))) { returnValue = true return this.break } diff --git a/src/atrules/atrules.test.js b/src/atrules/atrules.test.js index 454c2ae..4fc5480 100644 --- a/src/atrules/atrules.test.js +++ b/src/atrules/atrules.test.js @@ -580,6 +580,19 @@ AtRules('finds @media browserhacks', () => { assert.equal(actual, expected) }) +AtRules('does not crash on incomplete @media queries', () => { + let css = ` + @media (min-width) {} + @media (-moz-images-in-menus) {} + @media (min--moz-device-pixel-ratio) {} + @media (-ms-high-contrast), (-ms-high-contrast) {} + @media (min-resolution) {} + @media (-webkit-min-device-pixel-ratio) {} + ` + + assert.not.throws(() => analyze(css)) +}) + AtRules('analyzes @keyframes', () => { const fixture = ` @keyframes one {}