Violent clashes erupted in Paris during demonstrations against the new security legislation.
Hundreds of black-clad protesters fought with riot police at the end of a rally against a new law that would restrict the posting of officers’ faces.
Masked protesters threw fireworks at police lines, erected barricades and threw stones before smashing store windows and setting cars and a cafe on fire.
Police fired tear gas and stun grenades to disperse the crowd and used a water cannon in the early evening on the remaining groups of protesters in Place de la Bastille.
The Interior Ministry said it had counted 46,000 demonstrators in Paris. Police said they made nine arrests. Thousands of people also marched in Lille, Rennes, Strasbourg and other cities.
Organizers of the protest said some 500,000 people joined nationwide, including 200,000 in the capital.
The protests follow the publication this week of CCTV footage of the one-minute beating of black music producer Michel Zecler by three police officers in Paris on November 21.
The incident also fueled anger over a bill that is seen as restricting journalists’ right to report on police brutality.

The bill would criminalize the dissemination of images of police officers in certain circumstances, which opponents say would limit press freedom.
Many protesters carried placards with slogans such as “Who will protect us from the police”, “Stop police violence” and “Democracy bludgeon”.
The images of Mr. Zecler beaten circulated widely on social networks and in the French and foreign press. President Emmanuel Macron said on Friday the images were shameful for France.
Four police officers are being held for questioning as part of an investigation into the beatings.

Journalists’ organizations and civil liberty groups that organized the marches were joined by far-left activists, environmental activists and yellow vests protesters.
“What is happening in Paris is extremely worrying and we cannot let it go. I spent two years with the yellow vests and I saw all the violence, ”said protester Caroline Schatz during the march in Paris.
Mohamed Magassa 35, who works in a reception center for minors, said: “We have long felt victims of the institutionalized racism of the police. But now we feel that this week all of France woke up.
French Interior Minister Gerald Darmanin condemned the “unacceptable” violence against the police, saying 37 members of the security forces were injured across the country.

Critics say the legislation is further evidence of a shift to the right by French President Emmanuel Macron, who came to power in 2017 as a centrist promising liberal reform of France.
Images of Mr Zecler’s beating emerged days after police had already come under fire following the forcible relocation of a migrant camp in central Paris.
A series of high-profile cases against police officers for mistreating black and Arab citizens has raised accusations of institutionalized racism. The force insisted that the violations are the fault of isolated individuals.
Contact our news team by emailing us at [email protected]
For more stories like this, check out our news page.
Get your latest news, wellness stories, analysis and more
window.fbApi = (function () {
var fbApiInit = false; var awaitingReady = [];
var notifyQ = function () {
var i = 0,
l = awaitingReady.length;
for (i = 0; i < l; i++) {
awaitingReady[i]();
}
};
var ready = function (cb) {
if (fbApiInit) {
cb();
} else {
awaitingReady.push(cb);
}
};
var checkLoaded = function () {
return fbApiInit;
};
window.fbAsyncInit = function () {
FB.init({
appId: '176908729004638',
xfbml: true,
version: 'v2.10'
});
fbApiInit = true;
notifyQ();
};
return {
'ready' : ready,
'loaded' : checkLoaded
};
})();
(function () {
function injectFBSDK() {
if ( window.fbApi && window.fbApi.loaded() ) return;
var d = document,
s="script",
id = 'facebook-jssdk';
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) {
return;
}
js = d.createElement(s);
js.id = id;
js.async = true;
js.src = "https://connect.facebook.net/en_US/sdk.js";
fjs.parentNode.insertBefore(js, fjs);
}
if ('object' === typeof metro) {
window.addEventListener('metro:scroll', injectFBSDK, {once: true});
} else {
window.addEventListener('DOMContentLoaded', injectFBSDK, {once: true});
}
})();