{"record":{"id":"85e3e235b1750065","repo":"symfony/polyfill-mbstring","slug":"mb-str-pad-argument-3-pad-string-must-be-a-non-empty-string","errorCode":null,"errorMessage":"mb_str_pad(): Argument #3 ($pad_string) must be a non-empty string","messagePattern":"mb_str_pad\\(\\): Argument #3 \\(\\$pad_string\\) must be a non-empty string","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"Mbstring.php","lineNumber":903,"sourceCode":"    }\n\n    /** @return string|false */\n    public static function mb_str_pad(string $string, int $length, string $pad_string = ' ', int $pad_type = \\STR_PAD_RIGHT, ?string $encoding = null)\n    {\n        if (null === $encoding) {\n            $encoding = self::mb_internal_encoding();\n        } elseif (!self::assertEncoding($encoding, 'mb_str_pad(): Argument #5 ($encoding) must be a valid encoding, \"%s\" given')) {\n            return false;\n        }\n\n        if (self::mb_strlen($pad_string, $encoding) <= 0) {\n            if (\\PHP_VERSION_ID < 80000) {\n                trigger_error('mb_str_pad(): Argument #3 ($pad_string) must be a non-empty string', \\E_USER_WARNING);\n\n                return false;\n            }\n\n            throw new \\ValueError('mb_str_pad(): Argument #3 ($pad_string) must be a non-empty string');\n        }\n\n        if (!\\in_array($pad_type, [\\STR_PAD_RIGHT, \\STR_PAD_LEFT, \\STR_PAD_BOTH], true)) {\n            if (\\PHP_VERSION_ID < 80000) {\n                trigger_error('mb_str_pad(): Argument #4 ($pad_type) must be STR_PAD_LEFT, STR_PAD_RIGHT, or STR_PAD_BOTH', \\E_USER_WARNING);\n\n                return false;\n            }\n\n            throw new \\ValueError('mb_str_pad(): Argument #4 ($pad_type) must be STR_PAD_LEFT, STR_PAD_RIGHT, or STR_PAD_BOTH');\n        }\n\n        $paddingRequired = $length - self::mb_strlen($string, $encoding);\n\n        if ($paddingRequired < 1) {\n            return $string;\n        }\n","sourceCodeStart":885,"sourceCodeEnd":921,"githubUrl":"https://github.com/symfony/polyfill-mbstring/blob/d3d318bad5e7a1bfbd026009c8bfb8d8f99ae6b6/Mbstring.php#L885-L921","documentation":"Mbstring::mb_str_pad() throws this ValueError when $pad_string is an empty string, because padding with an empty string is impossible. This mirrors native PHP 8.3 mb_str_pad behavior; on PHP < 8.0 the polyfill triggers an E_USER_WARNING and returns false instead.","triggerScenarios":"Calling mb_str_pad($s, $len, '') or with a $pad_string argument that is an empty string — often from an empty config/template value or an empty substring used as the pad string.","commonSituations":"Pad string coming from a config value or language file that was left empty; code computing the pad string dynamically (e.g. substr result) that yields ''; default-parameter misuse where the caller explicitly passed '' thinking it means 'default'.","solutions":["Pass a non-empty $pad_string (omit the argument to use the default ' ')","Default empty values: $pad ?: ' ' before calling","Validate configured pad strings are non-empty at load time","Catch \\ValueError (PHP 8+) or detect the E_USER_WARNING/false (PHP < 8)"],"exampleFix":"// before\nmb_str_pad($label, 10, $padChar); // $padChar may be ''\n// after\nmb_str_pad($label, 10, $padChar !== '' ? $padChar : ' ');","handlingStrategy":"validation","validationCode":"if (!is_string($padString) || $padString === '') {\n    $padString = ' ';\n}\nmb_str_pad($string, $length, $padString, $padType, $encoding);","typeGuard":"function isNonEmptyString($value): bool\n{\n    return is_string($value) && $value !== '';\n}","tryCatchPattern":"try {\n    $padded = mb_str_pad($s, $len, $padString);\n} catch (\\ValueError $e) {\n    $padded = mb_str_pad($s, $len);\n}","preventionTips":["Omit $pad_string to get the default ' '","Coalesce empty configured pad strings: $pad ?: ' '","Validate pad strings when loading config/templates","Watch dynamic pad strings computed via substr etc."],"tags":["php","mbstring","polyfill","valueerror","empty-string"],"backgroundTag":"empty-required-field","analyzedSha":"d3d318bad5e7a1bfbd026009c8bfb8d8f99ae6b6","analyzedAt":"2026-09-13T19:34:02.044Z","contentChangedAt":"2026-09-13T19:34:02.044Z","schemaVersion":2},"datasetVersion":"2026-09-15T23:17:13.987Z"}