Two bugs found in Drupal 8 Core

Posted on: Wed, 17 Oct 2018 11:31 By: patrick

In the previous Drupal 8 site upgrade story, I mentioned that the link field type does not correctly render URLs with certain query strings. Example: is rendered incorrectly as

When I didn't receive any satisfactory answers to my plea for help on the StackExchange site "Drupal Answers", I decided to go bug hunting myself. The result: I found two bugs deep inside Drupal 8 Core! For the first bug I have submitted a new Drupal Core issue (issue 3007243). For the second bug I have contributed my analysis to the discussions of two existing Drupal Core issues (issue 2987114 and issue 1464244).

If you're interested you can hit the "Read more" button to find my detailed analysis. It's the same text that I wrote as answer on "Drupal Answers", but I'm reproducing it here to give my site a little bit more content 😀

Let's start at the beginning. The Link module works with the Drupal Core class Url. At the appropriate time, the Link module gets the URI from the Url object by invoking its toString() method. For external links, this method makes use of the Drupal Core class UnroutedUrlAssembler, by invoking its assemble() method, which in turn invokes another method buildExternalUrl.

Bug #1 is in buildExternalUrl: The method contains this line:

$options['query'] = NestedArray::mergeDeep($parsed['query'], $options['query']);

This is wrong because it doesn't preserve integer keys! Remember that the query parameter in my URL is numeric (1580, see the example at the beginning of this post)? The above line causes the 1580 to be discarded, instead the result is the 0 (zero) that we have seen in the mangled query string. The correct line would be this. The all-important thing is the TRUE parameter which tells NestedArray::mergeDeepArray() to preserve integer keys.

$options['query'] = NestedArray::mergeDeepArray(array($parsed['query'], $options['query']), TRUE);

Unfortunately this is not the end of the road. Where does the "=" character in the mangled query string come from? The assemble() method of the UnroutedUrlAssembler class first breaks down the URI into its individual parts like this:

$parsed = UrlHelper::parse($uri);

Then it reassembles the URI, piece by piece. The query string gets reassembled with this line:

$uri .= '?' . UrlHelper::buildQuery($options['query']);

The UrlHelper::buildQuery function generates "key=value" pairs from the entries in the supplied array ($options['query']). It omits the "=value" part if - and only if - the value of an array entry is NULL (the check is made with the PHP function isset()). As I have found out, for my example URL the value of the array entry is not NULL, it is an empty string - and that's what causes the "=" character to be generated.

But where is the empty string coming from? The function UrlHelper::parse() uses the PHP built-in function parse_str() to break down the query string into its parts, and that PHP function is the culprit! Here's the proof:

php -r '$query="1580"; $arr = array(); parse_str($query, $arr); echo "isset: " . isset($arr[1580]) . "\n"; echo "+" . $arr[1580] . "+\n"; echo "gettype: " . gettype($arr[1580]) . "\n";'
isset: 1
gettype: string

So to ultimately fix the problem, either parse_str() would have to change its buggy query string parsing, or the Drupal function UrlHelper::parse() would have to use some other function to parse query strings.


Acai Berry Health Benefits - Try An The Acai Berry Free Trial And Be Very Impressed!
#2 - Acai Berry Detox.
BBB rating V.
The related company is FWM Laboratories, Inc.
They have 2693 complaints against them, most of which have not been resolved by business.

Immunity - Before we describe the immunity boosting capabilities on the Acai Berry, we should take a glance at exactly what ORAC.
ORAC is a pace of the damage caused for the body by free radicals.
The acai berry colon cleanse fruit has 3800 ORAC anti-oxidants.
Its ORAC values are actually greater than spinach and broccoli used together.
High ORAC values help the fruit fight free radicals better.

Colon decontamination can be ended in many ways, although all methods are as well as actual ways.
Several methods in lieu of risk-free way to and actual results really are straightforward.
Daily contingent from a colon decontamination supplements are surprising benefits.
Colon is part of the wither all from the body, and books.
These wastes are provided by best shape and mind into family.

In South America, acai berries benefits benefits have been known for centuries.
Tribes used its antibacterial properties to fight infections, along with its antiseptic properties to heal cuts and scrapes.
They consume it in big quantities through the wine they make from which it.

If you are looking for the herbal supplement you be compelled to acai berries where to buy increase.
This is because if you buy this supplement you not just can loss your weight naturally anyone could take action without lack of energy the quantity acai berry supplement is the proper energy booster to a person stay energetic each and every day.

You have to be sure that any the product your buy is no extract and is freeze dried, so that the fruit are typically its full potency.
Most of the products you will find are just extracts and they also contain other ingredients that may decrease great and bad a supplement as a weightloss product.
One ingredient to beware of is guarana, which lowers the effectiveness of acai berries.

Acai contains antioxidants, fiber, protein, amino acids, healthy omega fats, and anthocyanins.
For greatest results when you acquire acai as well superfoods, cause them to be pure and organic.
Goods should be individually researched and tested within the seller's group.
All superfoods are excellent for supplementing proper diet, it's tough diet that is lacking regarding important nutrient substances.
When you've got buy superfoods, you gain numerous and invaluable advantages to your body's overall fitness and health.
Achieve longer life, ensure that your ideal weight, and fight disease together! They are the future of healthy everything they eat.

I know many of yourself will say "I just don't adequate to eat healthily, fastfood is too convenient" or "my va . so hectic, I'm lucky to get food any kind of - reduced healthy food".
I hope seeing those statement in print will all of them clear for they are; excuses and justifications to cover up the real problem.
The limiting issue is different lifestyles there is the.
Once you address it you can move on and, suddenly, your justifications look as ridiculous due to the fact ones I have written above.
Then you can finally make something happen.

Add new comment

The content of this field is kept private and will not be shown publicly.

Filtered HTML

  • Allowed HTML tags: <h1> <pre> <br> <a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type='1 A I'> <li> <dl> <dt> <dd> <h2 id='jump-*'> <h3 id> <h4 id> <h5 id> <h6 id>
  • Lines and paragraphs break automatically.
  • Web page addresses and email addresses turn into links automatically.
CAPTCHA This question is for testing whether or not you are a human visitor and to prevent automated spam submissions.