Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

how to catch hex2bin() warning

Tags:

php

Came across this today, not sure how to solve it.

I want to catch an E_WARNING level error issued by hex2bin().

I thought I might be able to use a try()catch() exception method but it did not work.

try {
    $foo = hex2bin($bar);
}
catch (Exception $e) {
    die('Custom message');
}

The standard E_WARNING that is issued is, of course:

Warning: hex2bin(): Input string must be hexadecimal string

In this particular situation I do not want to use the standard methods to disable errors, such as:

error_reporting(-1);
error_reporting(E_ALL);
ini_set("display_errors", 1);

Nor do I want to suppress the error using a @hex2bin method.

I actually want to have a custom error displayed, but I just do not seem to be able to find a way to catch when hex2bin throws an error.

like image 627
Abela Avatar asked Apr 28 '26 12:04

Abela


2 Answers

You can check the input value to verify that it is hex before passing it to the hex2bin method.

if (ctype_xdigit($bar) && strlen($bar) % 2 == 0) {
    $foo = hex2bin($bar);
} else {
    //display error here
}
like image 98
Mackers Avatar answered Apr 30 '26 03:04

Mackers


Per the documentation, hex2bin returns:

the binary representation of the given data or FALSE on failure.

That means you can do something like this if you want to use it in a try/catch block:

try {
  $foo = @hex2bin($bar);
  if(false === $foo) {
    throw new Exception("Invalid hexedecimal value.");
  }
} catch(Exception $e) {
  echo $e;
}

Yes, hex2bin is suppressed. You can remove the @ if you set error_reporting to suppress warnings.

Alternatively, you can check the type of $foo with ctype_xdigit() prior to using hex2bin().

like image 44
Rob W Avatar answered Apr 30 '26 04:04

Rob W



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!