lyswhut/lx-music-desktop · error · Error

max length no match

Error message

${rule.key} max length no match

What it means

dataVerify (utils.js:39) enforces a maximum character length via `String(val).length > rule.max`. When a field's string form exceeds its cap (e.g. name/singer max 200, img/url max 500-1024, ids max 64) it throws '<key> max length no match'. The check stringifies, so numbers are measured by their digit count.

Solutions

  1. Truncate the field at the sender to the documented max before constructing the link.
  2. Raise the rule's `max` if the larger size is legitimate for the field.
  3. Pre-truncate values before calling dataVerify (e.g. name.slice(0, 200)).
  4. Catch upstream and show which field overflowed via useDialog().

Example fix

// before
      if (rule.max && String(val).length > rule.max) throw new Error(rule.key + ' max length no match')

// after - include observed length and limit
      if (rule.max && String(val).length > rule.max) {
        throw new Error(`${rule.key} max length no match: ${String(val).length} > ${rule.max}`)
      }
Defensive patterns

Strategy: validation

Validate before calling

const findOverMax = (rules, data) =>
  rules.filter(r => r.max && data[r.key] != null && String(data[r.key]).length > r.max).map(r => r.key)
const over = findOverMax(rules, data)
if (over.length) {
  showErrorDialog(`Field(s) too long: ${over.join(', ')}`)
  return
}

Type guard

const withinMax = (rule, data) => {
  const v = data[rule.key]
  return v == null || !rule.max || String(v).length <= rule.max
}

Try / catch

try {
  info = dataVerify(rules, info)
} catch (e) {
  errorDialog(e.message)
}

Prevention

When it happens

Trigger: Any deep-link field whose string representation exceeds its declared max — a 300-character song name against max:200, a URL over 500/1024 chars, or a long albumName. The throw fires after the type check passes.

Common situations: Very long song/album/artist names from exotic metadata; injected or garbage data through an untrusted link; a URL with huge query params exceeding the 500/1024 caps.

Related errors


AI-assisted analysis of lyswhut/lx-music-desktop@9c364b482e (2026-08-12). Data as JSON: /api/errors/5f02473a9560ecc8. Report an issue: GitHub.

Appendix: source

Thrown at src/renderer/core/useApp/useDeeplink/utils.js:39

export const qualitys = ['128k', '320k', 'flac', 'flac24bit']
export const qualityFilter = (source, types) => {
  types = types.filter(({ type }) => qualitys.includes(type)).map(({ type, size, hash }) => {
    if (size != null && typeof size != 'string') throw new Error(type + ' size type no match')
    if (source == 'kg' && typeof hash != 'string') throw new Error(type + ' hash type no match')
    return hash == null ? { type, size } : { type, size, hash }
  })
  if (!types.length) throw new Error('quality no match')
  return types
}

export const dataVerify = (rules, data) => {
  const newData = {}
  for (const rule of rules) {
    const val = data[rule.key]
    if (rule.required && val == null) throw new Error(rule.key + ' missing')
    if (val != null) {
      if (rule.types && !rule.types.includes(typeof val)) throw new Error(rule.key + ' type no match')
      if (rule.max && String(val).length > rule.max) throw new Error(rule.key + ' max length no match')
      if (rule.min && String(val).length > rule.min) throw new Error(rule.key + ' min length no match')
    }
    newData[rule.key] = val
  }
  return newData
}

View on GitHub (pinned to 9c364b482e)