av9ash/GitBugs huggingface dataset:
Bug: TestRegistryDNS.testMissingReverseLookup Failing
Status: Open | Priority: Major | Resolution: 
Created: 25/Aug/22 08:26
Affects Version/s: 3.3.3

TestRegistryDNS.testMissingReverseLookup Failing with 

 
|java.lang.AssertionError: Missing record should be: expected:<3> but was:<0>|
|at org.junit.Assert.fail(Assert.java:89)|
|at org.junit.Assert.failNotEquals(Assert.java:835)|
|at org.junit.Assert.assertEquals(Assert.java:647)|
|at org.apache.hadoop.registry.server.dns.TestRegistryDNS.testMissingReverseLookup(TestRegistryDNS.java:351)|
|at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)|
|at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)|
|at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)|
|at java.lang.reflect.Method.invoke(Method.java:498)|
|at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)|
|at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)|
|at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)|
|at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)|
|at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)|
|at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)|
|at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)|
|at org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)|
|at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)|
|at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)|
|at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)|
|at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)|
|at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)|
|at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)|
|at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)|
|at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)|
|at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)|
|at org.junit.runners.ParentRunner.run(ParentRunner.java:413)|
|at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:365)|
|at org.apache.maven.surefire.junit4.JUnit4Provider.executeWithRerun(JUnit4Provider.java:273)|
|at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:238)|
|at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:159)|
|at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:384)|
|at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:345)|
|at org.apache.maven.surefire.booter.ForkedBooter.execute(ForkedBooter.java:126)|
|at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:418)|
Bug: Running org.apache.hadoop.ha.TestZKFailoverController when "hadoop.security.groups.cache.secs" is zero or negative numbers will throw ambiguous exception
Status: Open | Priority: Major | Resolution: 
Created: 25/Jul/22 11:00
Affects Version/s: 2.10.2

{quote}
{code:java}
<property>
  <name>hadoop.security.groups.cache.secs</name>
  <value>300</value>
  <description>
    This is the config controlling the validity of the entries in the cache
    containing the user->group mapping. When this duration has expired,
    then the implementation of the group mapping provider is invoked to get
    the groups of the user and then cached back.
  </description>
</property>{code}
{quote}
As we see  in core-default.xml of hadoop.security.groups.cache.secs,  the default value is 300. But when we set it to zero or negative number and  then run org.apache.hadoop.ha.TestZKFailoverController#testGracefulFailoverMultipleZKfcs, it will throw NullPointerException as below：
{quote}
{code:java}
[INFO] Running org.apache.hadoop.ha.TestZKFailoverController
[ERROR] Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.932 s <<< FAILURE! - in org.apache.hadoop.ha.TestZKFailoverController
[ERROR] testGracefulFailoverMultipleZKfcs(org.apache.hadoop.ha.TestZKFailoverController)  Time elapsed: 0.799 s  <<< ERROR!
java.lang.NullPointerException
        at org.apache.hadoop.ha.ZKFailoverController.run(ZKFailoverController.java:188)
        at org.apache.hadoop.ha.MiniZKFCCluster.start(MiniZKFCCluster.java:116)
        at org.apache.hadoop.ha.TestZKFailoverController.testGracefulFailoverMultipleZKfcs(TestZKFailoverController.java:581)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)
        at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
        at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)
        at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
        at org.apache.zookeeper.JUnit4ZKTestRunner$LoggedInvokeMethod.evaluate(JUnit4ZKTestRunner.java:55)
        at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
        at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
        at org.junit.rules.TestWatchman$1.evaluate(TestWatchman.java:53)
        at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:299)
        at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:293)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.lang.Thread.run(Thread.java:748){code}
{quote}
Bug: Replace Google Analytics with ASF Matomo in website
Status: Open | Priority: Major | Resolution: 
Created: 03/Sep/22 18:21

We currently use Google Analytics (https://github.com/apache/hadoop-site/blob/asf-site/layouts/partials/footer.html#L37) in the website but it's not recommended.

Also we should link the Privacy Policy to https://privacy.apache.org/policies/privacy-policy-public.html instead of Hadoop's one https://hadoop.apache.org/privacy_policy.html

For more details, please check: https://privacy.apache.org/faq/committers.html and https://www.apache.org/foundation/marks/pmcs.html#navigation
Bug: s3a endpoint per bucket configuration in pyspark is ignored
Status: Resolved | Priority: Major | Resolution: Invalid
Created: 08/Sep/22 14:50

I'm using EMR emr-6.5.0 cluster in us-east-1 with ec2 instances. cluster is running spark application using pyspark 3.2.1
 EMR is using Hadoop distribution:Amazon 3.2.1
my spark application is reading from one bucket in us-west-2 and writing to a bucket in us-east-1.
since I'm processing a large amount of data I'm paying a lot of money for the network transport . in order to reduce the cost I have create a vpc interface to s3 endpoint in us-west-2. inside the spark application I'm using aws cli for reading the file names from us-west-2 bucket and it is working through the s3 interface endpoint but when I use pyspark to read the data it is using the us-east-1 s3 endpoint instead of the us-west-2 endpoint.
 I tried to use per bucket configuration but it is being ignored although I added it to the defualt configuration and to spark submit call.
I tried to set the following configuration but they are ignored:
 '--conf', "spark.hadoop.fs.s3a.aws.credentials.provider=com.amazonaws.auth.DefaultAWSCredentialsProviderChain",
 '--conf', "spark.hadoop.fs.s3a.impl=org.apache.hadoop.fs.s3a.S3AFileSystem",
 '--conf', "spark.hadoop.fs.s3a.bucket.<us-west-2-bucket -name>.endpoint=<my vpc endpoint>",
 '--conf', "spark.hadoop.fs.s3a.bucket.<us-west-2-bucket -name>.endpoint.region=us-west-2",
 '--conf', "spark.hadoop.fs.s3a.bucket.<us-east-1-bucket -name>.endpoint=<vpc gateway endpoint>",
 '--conf', "spark.hadoop.fs.s3a.bucket.<us-east-1-bucket -name>.endpoint.region=us-east-1",
 '--conf', "spark.hadoop.fs.s3a.path.style.access=false"
Bug: TestDelegatingSSLSocketFactory.testOpenSSL failing on ARM aarch64
Status: Open | Priority: Major | Resolution: 
Created: 21/Sep/22 08:16
Affects Version/s: 3.3.4

i run hadoop maven test in ARM aarch64 and throw Error constructing implementation，problem class is org.wildfly.openssl.OpenSSLContextSPI$OpenSSLTLSContextSpi. i have tested this problem didnt show in the x86_64.
Bug: Update hsqldb.version from 2.3.4 to 2.5.2
Status: Resolved | Priority: Major | Resolution: Fixed
Created: 13/Sep/22 00:49
Affects Version/s: 3.4.0

I plan to upgrade the version of hsqldb from 2.3.4 to 2.5.2 for the following reasons:

1.Current version 2.3.4 is almost ~6 years old，Upgrading to new release to keep up for new features and bug fixes.

2.I plan to increase the verification of the table building statement, which needs to use the compatibility mode of Mysql and SqlServer. 
The 2.5.2 version of hsqldb does better.

3.We are temporarily unable to upgrade hsqldb to version 2.6.0 because version 2.6.0 depends on JDK11.
Bug: Upgrade hadolint to 2.10.0
Status: Open | Priority: Major | Resolution: 
Created: 10/Sep/22 04:43
Affects Version/s: 3.4.0

The current version of hadolint (1.11.1) is only suitable for linting Linux commands in Dockerfile. It fails to recognize Windows command syntax.
HADOOP-18133 adds Dockerfile for Windows. Thus, it's essential to upgrade hadolint to 2.10.0 which has the ability to recognize Windows command syntax.
Bug: Fix VectoredIO for LocalFileSystem when checksum is enabled.
Status: Resolved | Priority: Major | Resolution: Fixed
Created: 02/Sep/22 19:09
Affects Version/s: 3.3.5

While merging the ranges in CheckSumFs, they are rounded up based on the value of checksum bytes size
which leads to some ranges crossing the EOF thus they need to be fixed else it will cause EOFException during actual reads.
Bug: Migrate to new azure-storage SDKs
Status: Open | Priority: Major | Resolution: 
Created: 07/Sep/22 11:42

The last time the {{azure-storage}} sdk was updated was more than 2 years ago:
[https://github.com/apache/hadoop/blame/trunk/hadoop-project/pom.xml#L1545]

The sdk have since been updated and have gone through major design changes, the reasoning for which are documented here:
[https://github.com/Azure/azure-storage-java/blob/master/V12%20Upgrade%20Story.md]

Upgrading to the latest sdk will bring many improvements, performance improvements and bug fixes - too many to list or count.
In order the to move forward with time, and avoid being stuck when the service API versions start getting deprecated and removed, this needs to be addressed.

The needed changes would be mostly in the following modules:
 # [https://github.com/apache/hadoop/tree/trunk/hadoop-tools/hadoop-azure]
 # [https://github.com/apache/hadoop/tree/trunk/hadoop-tools/hadoop-azure-datalake]
Bug: TestArnResource.parseAccessPointFromArn failing intermittently
Status: Resolved | Priority: Major | Resolution: Duplicate
Created: 25/Aug/22 08:33
Affects Version/s: 3.3.3

TestArnResource.parseAccessPointFromArn failing with

 
{code}

|org.junit.ComparisonFailure: Endpoint does not match expected:<s3[-accesspoint.]eu-west-1.amazonaws....> but was:<s3[.accesspoint-]eu-west-1.amazonaws....>|
|at org.junit.Assert.assertEquals(Assert.java:117)|
|at org.apache.hadoop.fs.s3a.TestArnResource.parseAccessPointFromArn(TestArnResource.java:60)|
|at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)|
|at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)|
|at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)|
|at java.lang.reflect.Method.invoke(Method.java:498)|
|at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)|
|at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)|
|at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)|
|at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)|
|at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)|
|at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:299)|
|at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:293)|
|at java.util.concurrent.FutureTask.run(FutureTask.java:266)|
|at java.lang.Thread.run(Thread.java:748)|
| |

{code}
Bug: List of test failing in 3.3.3
Status: Resolved | Priority: Major | Resolution: Duplicate
Created: 25/Aug/22 08:41
Affects Version/s: 3.3.3

# org.apache.hadoop.fs.s3a.TestArnResource

|org.junit.ComparisonFailure: Endpoint does not match expected:<s3[-accesspoint.]eu-west-1.amazonaws....> but was:<s3[.accesspoint-]eu-west-1.amazonaws....>|
|at org.junit.Assert.assertEquals(Assert.java:117)|
|at org.apache.hadoop.fs.s3a.TestArnResource.parseAccessPointFromArn(TestArnResource.java:60)|
|at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)|
|at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)|
|at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)|
|at java.lang.reflect.Method.invoke(Method.java:498)|
|at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)|
|at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)|
|at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)|
|at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)|
|at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)|
|at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:299)|
|at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:293)|
|at java.util.concurrent.FutureTask.run(FutureTask.java:266)|
|at java.lang.Thread.run(Thread.java:748)|
| |
|[System Output]|
|2022-08-25 05:43:12,254 [JUnit-parseAccessPointFromArn] INFO s3a.TestArnResource (TestArnResource.java:describe(73)) - Parse AccessPoint ArnResource from arn string|

 #
Bug: Proxy users do not share RPC connections
Status: Open | Priority: Major | Resolution: 
Created: 31/Aug/22 16:34

When the Hive MetaStore uses Storage-Based Authorization, it needs to perform checks against the NameNode as the query's user. Unfortunately, RPC's ConnectionId uses the UGI's equal & hash functions, which check for the subject's object equality.

 

Thus, we've seen the HMS spawn thousands of threads before they go idle and are eventually closed. If the peak goes over 10k threads the HMS becomes unstable.
Bug: hadoop 3.3.4 doesn't have a binary-aarch64 download link
Status: Resolved | Priority: Major | Resolution: Duplicate
Created: 31/Aug/22 03:17
Affects Version/s: 3.3.4

[Apache Hadoop|https://hadoop.apache.org/releases.html] !image-2022-08-31-11-16-56-994.png!

the link is empty

 

!image-2022-08-31-11-17-31-812.png!
Bug: Upgrade bundled Tomcat to 8.5.82
Status: Resolved | Priority: Major | Resolution: Fixed
Created: 24/Aug/22 14:46
Affects Version/s: 2.10.2

h4.  

Currently we are using 8.5.81 which is affected by CVE-2022-34305

More Details - [https://github.com/advisories/GHSA-6j88-6whg-x687]

Lets upgrade  to 8.5.82
Bug: Support @Metric annotation on String fields similarly as with methods returning String
Status: Open | Priority: Major | Resolution: 
Created: 19/Aug/22 09:41

In the Metrics2 framework, if a method is annotated with Metric annotation, and if it returns a String, then the String is understood as a TAG.

A field that is annotated with the Metric annotation on the other hand is not understood as a tag, even if the type of the annotation is set to Metric.Type.TAG, and gets ignored if the field type is String.

It would be great if Metric annotated String fields would have the same default behaviour as Metric annotated methods that return String value.

This has come up as part of HDDS-7120 (discussion is in the PR for that ticket).
Bug: Unable to Find LoginModel Class using IBM Java openJ9 version 8.0.332.0
Status: Open | Priority: Major | Resolution: 
Created: 19/Aug/22 12:26
Affects Version/s: 3.3.4

Hi,

I am using Spark v.3.3.0 and Java version IBM Semeru 8.0.332.0.

When I run my Spark Job I get the following exception:

org.apache.hadoop.security.KerberosAuthException: failure to login: javax.security.auth.login.LoginException: unable to find LoginModule class: 
com.ibm.security.auth.module.JAASLoginModule
    at org.apache.hadoop.security.UserGroupInformation.doSubjectLogin(UserGroupInformation.java:1986)
    at org.apache.hadoop.security.UserGroupInformation.createLoginUser(UserGroupInformation.java:719)
    at org.apache.hadoop.security.UserGroupInformation.getLoginUser(UserGroupInformation.java:669)
    at org.apache.hadoop.security.UserGroupInformation.getCurrentUser(UserGroupInformation.java:579)
    at org.apache.spark.util.Utils$.$anonfun$getCurrentUserName$1(Utils.scala:2561)
    at scala.Option.getOrElse(Option.scala:138)
    at org.apache.spark.util.Utils$.getCurrentUserName(Utils.scala:2561)
    at org.apache.spark.SparkContext.<init>(SparkContext.scala:316)
    at org.apache.spark.SparkContext$.getOrCreate(SparkContext.scala:2704)
    at org.apache.spark.sql.SparkSession$Builder.$anonfun$getOrCreate$2(SparkSession.scala:953)
    at scala.Option.getOrElse(Option.scala:138)

This looks similar to a previously reported error that has been fixed: https://issues.apache.org/jira/browse/HADOOP-17971

N.B. The exception I am getting does not contain 'org.apache.hadoop.shaded" in the package name, whereas in HADOOP-17971 it does: (org.apache.hadoop.shaded.com.ibm.security.auth.module.JAASLoginModule).

 

Spark spark-core_2.12 library contains two Hadoop dependencies:

hadoop-client-api:jar:3.3.2:compile

hadoop-client-runtime:jar:3.3.2:compile

After getting the exception, I tried excluding those components from the Spark dependency in my pom.xml, and explicitly defined them as dependencies. I tried versions 3.3.4 and 3.3.3 but I still get the same error.

 

N.B. I don't get this exception with Java version IBM Semeru 8.0.312.0

I can move this to a Spark issue if this isn't the correct place to post it.

Thanks,

Steve
Bug: Prevent AvroRecord*.class from being included non-test jar
Status: Resolved | Priority: Major | Resolution: Fixed
Created: 10/Aug/22 09:54
Affects Version/s: 3.3.3

bq. 
{code}
[WARNING] Rule 1: org.apache.maven.plugins.enforcer.BanDuplicateClasses failed with message:
Duplicate classes found:

Found in:
org.apache.hadoop:hadoop-client-minicluster:jar:3.3.4:compile
org.apache.hadoop:hadoop-client-api:jar:3.3.4:compile
Duplicate classes:
org/apache/hadoop/io/serializer/avro/AvroRecord.class
org/apache/hadoop/io/serializer/avro/AvroRecord$Builder.class
org/apache/hadoop/io/serializer/avro/AvroRecord$1.class

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-enforcer-plugin:3.0.0-M1:enforce (enforce-banned-dependencies) on project hadoop-client-check-test-invariants: Some Enforcer rules have failed. Look above for specific messages explaining why the rule failed. -> [Help 1] 
{code}


When building Hadoop, AvroRecord*.class are included in hadoop-client-api jar and I think it is wrong.
It is caused by "protobuf-maven-plugin" as a side effect.

https://github.com/apache/hadoop/blob/rel/release-3.3.4/hadoop-common-project/hadoop-common/pom.xml#L1118


{code:xml}
              <execution>
                <id>src-test-compile-protoc-legacy</id>
                <phase>generate-test-sources</phase>
                <goals>
                  <goal>compile</goal>
                </goals>
                <configuration>
                  <skip>false</skip>
                  <!--Generating with old protobuf version for backward compatibility-->
                  <protocArtifact>
                    com.google.protobuf:protoc:${protobuf.version}:exe:${os.detected.classifier}
                  </protocArtifact>
                  <includeDependenciesInDescriptorSet>false</includeDependenciesInDescriptorSet>
                  <protoSourceRoot>${basedir}/src/test/proto</protoSourceRoot>
                  <outputDirectory>${project.build.directory}/generated-test-sources/java</outputDirectory>
                  <clearOutputDirectory>false</clearOutputDirectory>
                  <includes>
                    <include>test_legacy.proto</include>
                    <include>test_rpc_service_legacy.proto</include>
                  </includes>
                </configuration>
              </execution>
{code}

"src-test-compile-protoc-legacy" 's goal is written "compile" wrongly. It makes outputDirectory (${project.build.directory}/generated-test-sources/java) to be added to "compileSourceRoots" of maven-compiler-plugin.
"src-test-compile-protoc-legacy" 's goal should be "test-compile".
Bug: ITestS3ACannedACLs failure; not in a span
Status: Resolved | Priority: Major | Resolution: Fixed
Created: 02/Aug/22 13:17

seen in a test of the prefetcn feature branch, but it looks more like this has been lurking for a long time, or just that some code change has moved the api call out of a span.


{code}
[INFO] Running org.apache.hadoop.fs.s3a.ITestS3ACannedACLs
[ERROR] Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.592 s <<< FAILURE! - in org.apache.hadoop.fs.s3a.ITestS3ACannedACLs
[ERROR] testCreatedObjectsHaveACLs(org.apache.hadoop.fs.s3a.ITestS3ACannedACLs)  Time elapsed: 0.591 s  <<< ERROR!
org.apache.hadoop.fs.s3a.audit.AuditFailureException: dbb71c86-e022-4b76-99cf-c1f64dd21389-00013058 unaudited operation executing a request outside an audit span {com.amazonaws.services.s3.model.GetObjectAclRequest size=0, mutating=true}
        at org.apache.hadoop.fs.s3a.ITestS3ACannedACLs.assertObjectHasLoggingGrant(ITestS3ACannedACLs.java:94)
        at org.apache.hadoop.fs.s3a.ITestS3ACannedACLs.testCreatedObjectsHaveACLs(ITestS3ACannedACLs.java:69)
{code}


fix is trivial: do the operation within a span